Skip to content

Commit

Permalink
Use two underscores to separate prefix
Browse files Browse the repository at this point in the history
  • Loading branch information
bugadani committed Dec 20, 2024
1 parent f83ab23 commit 02752bf
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 51 deletions.
67 changes: 39 additions & 28 deletions esp-config/src/generate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ fn integer_in_range(range: &Range<i128>, value: &Value) -> Result<(), Error> {
///
/// Unknown keys with the supplied prefix will cause this function to panic.
pub fn generate_config(
prefix: &str,
crate_name: &str,
config: &[(&str, &str, Value, Option<Validator>)],
emit_md_tables: bool,
) -> HashMap<String, Value> {
Expand All @@ -264,7 +264,7 @@ pub fn generate_config(
let mut selected_config = String::from(SELECTED_TABLE_HEADER);

// Ensure that the prefix is `SCREAMING_SNAKE_CASE`:
let prefix = screaming_snake_case(prefix);
let prefix = format!("{}__", screaming_snake_case(crate_name));

// Build a lookup table for any provided validators; we must prefix the
// name of the config and transform it to SCREAMING_SNAKE_CASE so that
Expand All @@ -273,7 +273,7 @@ pub fn generate_config(
.iter()
.flat_map(|(name, _description, _default, validator)| {
if let Some(validator) = validator {
let name = format!("{prefix}_{}", screaming_snake_case(name));
let name = format!("{prefix}{}", screaming_snake_case(name));
Some((name, validator))
} else {
None
Expand All @@ -293,7 +293,7 @@ pub fn generate_config(
emit_configuration(&prefix, &configs, &mut selected_config);

if emit_md_tables {
let file_name = snake_case(&prefix);
let file_name = snake_case(crate_name);
write_config_tables(&file_name, doc_table, selected_config);
}

Expand Down Expand Up @@ -341,7 +341,7 @@ fn create_config(
let mut configs = HashMap::new();

for (name, description, default, _validator) in config {
let name = format!("{prefix}_{}", screaming_snake_case(name));
let name = format!("{prefix}{}", screaming_snake_case(name));
configs.insert(name.clone(), default.clone());

// Write documentation table line:
Expand All @@ -361,7 +361,7 @@ fn capture_from_env(prefix: &str, configs: &mut HashMap<String, Value>) {

// Try and capture input from the environment:
for (var, value) in env::vars() {
if var.strip_prefix(prefix).is_some() {
if var.starts_with(prefix) {
let Some(cfg) = configs.get_mut(&var) else {
unknown.push(var);
continue;
Expand All @@ -388,7 +388,7 @@ fn emit_configuration(
selected_config: &mut String,
) {
for (name, value) in configs.iter() {
let cfg_name = snake_case(name.trim_start_matches(&format!("{prefix}_")));
let cfg_name = snake_case(name.trim_start_matches(prefix));
println!("cargo:rustc-check-cfg=cfg({cfg_name})");

if let Value::Bool(true) = value {
Expand Down Expand Up @@ -464,10 +464,10 @@ mod test {
fn env_override() {
temp_env::with_vars(
[
("ESP_TEST_NUMBER", Some("0xaa")),
("ESP_TEST_NUMBER_SIGNED", Some("-999")),
("ESP_TEST_STRING", Some("Hello world!")),
("ESP_TEST_BOOL", Some("true")),
("ESP_TEST__NUMBER", Some("0xaa")),
("ESP_TEST__NUMBER_SIGNED", Some("-999")),
("ESP_TEST__STRING", Some("Hello world!")),
("ESP_TEST__BOOL", Some("true")),
],
|| {
let configs = generate_config(
Expand All @@ -491,28 +491,28 @@ mod test {

// some values have changed
assert_eq!(
match configs.get("ESP_TEST_NUMBER").unwrap() {
match configs.get("ESP_TEST__NUMBER").unwrap() {
Value::Integer(num) => *num,
_ => unreachable!(),
},
0xaa
);
assert_eq!(
match configs.get("ESP_TEST_NUMBER_SIGNED").unwrap() {
match configs.get("ESP_TEST__NUMBER_SIGNED").unwrap() {
Value::Integer(num) => *num,
_ => unreachable!(),
},
-999
);
assert_eq!(
match configs.get("ESP_TEST_STRING").unwrap() {
match configs.get("ESP_TEST__STRING").unwrap() {
Value::String(val) => val,
_ => unreachable!(),
},
"Hello world!"
);
assert_eq!(
match configs.get("ESP_TEST_BOOL").unwrap() {
match configs.get("ESP_TEST__BOOL").unwrap() {
Value::Bool(val) => *val,
_ => unreachable!(),
},
Expand All @@ -521,21 +521,21 @@ mod test {

// the rest are the defaults
assert_eq!(
match configs.get("ESP_TEST_NUMBER_DEFAULT").unwrap() {
match configs.get("ESP_TEST__NUMBER_DEFAULT").unwrap() {
Value::Integer(num) => *num,
_ => unreachable!(),
},
999
);
assert_eq!(
match configs.get("ESP_TEST_STRING_DEFAULT").unwrap() {
match configs.get("ESP_TEST__STRING_DEFAULT").unwrap() {
Value::String(val) => val,
_ => unreachable!(),
},
"Demo"
);
assert_eq!(
match configs.get("ESP_TEST_BOOL_DEFAULT").unwrap() {
match configs.get("ESP_TEST__BOOL_DEFAULT").unwrap() {
Value::Bool(val) => *val,
_ => unreachable!(),
},
Expand All @@ -549,10 +549,10 @@ mod test {
fn builtin_validation_passes() {
temp_env::with_vars(
[
("ESP_TEST_POSITIVE_NUMBER", Some("7")),
("ESP_TEST_NEGATIVE_NUMBER", Some("-1")),
("ESP_TEST_NON_NEGATIVE_NUMBER", Some("0")),
("ESP_TEST_RANGE", Some("9")),
("ESP_TEST__POSITIVE_NUMBER", Some("7")),
("ESP_TEST__NEGATIVE_NUMBER", Some("-1")),
("ESP_TEST__NON_NEGATIVE_NUMBER", Some("0")),
("ESP_TEST__RANGE", Some("9")),
],
|| {
generate_config(
Expand Down Expand Up @@ -591,7 +591,7 @@ mod test {

#[test]
fn custom_validation_passes() {
temp_env::with_vars([("ESP_TEST_NUMBER", Some("13"))], || {
temp_env::with_vars([("ESP_TEST__NUMBER", Some("13"))], || {
generate_config(
"esp-test",
&[(
Expand All @@ -615,7 +615,7 @@ mod test {
#[test]
#[should_panic]
fn builtin_validation_bails() {
temp_env::with_vars([("ESP_TEST_POSITIVE_NUMBER", Some("-99"))], || {
temp_env::with_vars([("ESP_TEST__POSITIVE_NUMBER", Some("-99"))], || {
generate_config(
"esp-test",
&[(
Expand All @@ -632,7 +632,7 @@ mod test {
#[test]
#[should_panic]
fn custom_validation_bails() {
temp_env::with_vars([("ESP_TEST_NUMBER", Some("37"))], || {
temp_env::with_vars([("ESP_TEST__NUMBER", Some("37"))], || {
generate_config(
"esp-test",
&[(
Expand All @@ -658,8 +658,8 @@ mod test {
fn env_unknown_bails() {
temp_env::with_vars(
[
("ESP_TEST_NUMBER", Some("0xaa")),
("ESP_TEST_RANDOM_VARIABLE", Some("")),
("ESP_TEST__NUMBER", Some("0xaa")),
("ESP_TEST__RANDOM_VARIABLE", Some("")),
],
|| {
generate_config(
Expand All @@ -674,7 +674,18 @@ mod test {
#[test]
#[should_panic]
fn env_invalid_values_bails() {
temp_env::with_vars([("ESP_TEST_NUMBER", Some("Hello world"))], || {
temp_env::with_vars([("ESP_TEST__NUMBER", Some("Hello world"))], || {
generate_config(
"esp-test",
&[("number", "NA", Value::Integer(999), None)],
false,
);
});
}

#[test]
fn env_unknown_prefix_is_ignored() {
temp_env::with_vars([("ESP_TEST_OTHER__NUMBER", Some("Hello world"))], || {
generate_config(
"esp-test",
&[("number", "NA", Value::Integer(999), None)],
Expand Down
2 changes: 1 addition & 1 deletion esp-ieee802154/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ struct QueueConfig {
}

pub(crate) const CONFIG: QueueConfig = QueueConfig {
rx_queue_size: esp_config_int!(usize, "ESP_IEEE802154_RX_QUEUE_SIZE"),
rx_queue_size: esp_config_int!(usize, "ESP_IEEE802154__RX_QUEUE_SIZE"),
};

/// IEEE 802.15.4 driver configuration
Expand Down
42 changes: 21 additions & 21 deletions esp-wifi/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -185,27 +185,27 @@ struct Config {
}

pub(crate) const CONFIG: config::EspWifiConfig = config::EspWifiConfig {
rx_queue_size: esp_config_int!(usize, "ESP_WIFI_RX_QUEUE_SIZE"),
tx_queue_size: esp_config_int!(usize, "ESP_WIFI_TX_QUEUE_SIZE"),
static_rx_buf_num: esp_config_int!(usize, "ESP_WIFI_STATIC_RX_BUF_NUM"),
dynamic_rx_buf_num: esp_config_int!(usize, "ESP_WIFI_DYNAMIC_RX_BUF_NUM"),
static_tx_buf_num: esp_config_int!(usize, "ESP_WIFI_STATIC_TX_BUF_NUM"),
dynamic_tx_buf_num: esp_config_int!(usize, "ESP_WIFI_DYNAMIC_TX_BUF_NUM"),
csi_enable: esp_config_bool!("ESP_WIFI_CSI_ENABLE"),
ampdu_rx_enable: esp_config_bool!("ESP_WIFI_AMPDU_RX_ENABLE"),
ampdu_tx_enable: esp_config_bool!("ESP_WIFI_AMPDU_TX_ENABLE"),
amsdu_tx_enable: esp_config_bool!("ESP_WIFI_AMSDU_TX_ENABLE"),
rx_ba_win: esp_config_int!(usize, "ESP_WIFI_RX_BA_WIN"),
max_burst_size: esp_config_int!(usize, "ESP_WIFI_MAX_BURST_SIZE"),
country_code: esp_config_str!("ESP_WIFI_COUNTRY_CODE"),
country_code_operating_class: esp_config_int!(u8, "ESP_WIFI_COUNTRY_CODE_OPERATING_CLASS"),
mtu: esp_config_int!(usize, "ESP_WIFI_MTU"),
tick_rate_hz: esp_config_int!(u32, "ESP_WIFI_TICK_RATE_HZ"),
listen_interval: esp_config_int!(u16, "ESP_WIFI_LISTEN_INTERVAL"),
beacon_timeout: esp_config_int!(u16, "ESP_WIFI_BEACON_TIMEOUT"),
ap_beacon_timeout: esp_config_int!(u16, "ESP_WIFI_AP_BEACON_TIMEOUT"),
failure_retry_cnt: esp_config_int!(u8, "ESP_WIFI_FAILURE_RETRY_CNT"),
scan_method: esp_config_int!(u32, "ESP_WIFI_SCAN_METHOD"),
rx_queue_size: esp_config_int!(usize, "ESP_WIFI__RX_QUEUE_SIZE"),
tx_queue_size: esp_config_int!(usize, "ESP_WIFI__TX_QUEUE_SIZE"),
static_rx_buf_num: esp_config_int!(usize, "ESP_WIFI__STATIC_RX_BUF_NUM"),
dynamic_rx_buf_num: esp_config_int!(usize, "ESP_WIFI__DYNAMIC_RX_BUF_NUM"),
static_tx_buf_num: esp_config_int!(usize, "ESP_WIFI__STATIC_TX_BUF_NUM"),
dynamic_tx_buf_num: esp_config_int!(usize, "ESP_WIFI__DYNAMIC_TX_BUF_NUM"),
csi_enable: esp_config_bool!("ESP_WIFI__CSI_ENABLE"),
ampdu_rx_enable: esp_config_bool!("ESP_WIFI__AMPDU_RX_ENABLE"),
ampdu_tx_enable: esp_config_bool!("ESP_WIFI__AMPDU_TX_ENABLE"),
amsdu_tx_enable: esp_config_bool!("ESP_WIFI__AMSDU_TX_ENABLE"),
rx_ba_win: esp_config_int!(usize, "ESP_WIFI__RX_BA_WIN"),
max_burst_size: esp_config_int!(usize, "ESP_WIFI__MAX_BURST_SIZE"),
country_code: esp_config_str!("ESP_WIFI__COUNTRY_CODE"),
country_code_operating_class: esp_config_int!(u8, "ESP_WIFI__COUNTRY_CODE_OPERATING_CLASS"),
mtu: esp_config_int!(usize, "ESP_WIFI__MTU"),
tick_rate_hz: esp_config_int!(u32, "ESP_WIFI__TICK_RATE_HZ"),
listen_interval: esp_config_int!(u16, "ESP_WIFI__LISTEN_INTERVAL"),
beacon_timeout: esp_config_int!(u16, "ESP_WIFI__BEACON_TIMEOUT"),
ap_beacon_timeout: esp_config_int!(u16, "ESP_WIFI__AP_BEACON_TIMEOUT"),
failure_retry_cnt: esp_config_int!(u8, "ESP_WIFI__FAILURE_RETRY_CNT"),
scan_method: esp_config_int!(u32, "ESP_WIFI__SCAN_METHOD"),
};

// Validate the configuration at compile time
Expand Down
2 changes: 1 addition & 1 deletion examples/.cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ PASSWORD = "PASSWORD"
STATIC_IP = "1.1.1.1 "
GATEWAY_IP = "1.1.1.1"
HOST_IP = "1.1.1.1"
ESP_WIFI_CSI_ENABLE = "true"
ESP_WIFI__CSI_ENABLE = "true"

[unstable]
build-std = ["alloc", "core"]

0 comments on commit 02752bf

Please sign in to comment.