Skip to content

Commit 5780557

Browse files
authored
update precedence (#215)
also added unit tests, and inline-comments to know which env vars are from which module
1 parent 30b7d1e commit 5780557

File tree

1 file changed

+34
-6
lines changed

1 file changed

+34
-6
lines changed

bottlecap/src/config.rs

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,24 +28,28 @@ pub struct Config {
2828
pub version: Option<String>,
2929
pub tags: Option<String>,
3030
pub log_level: LogLevel,
31-
pub apm_enabled: bool,
3231
pub serverless_logs_enabled: bool,
33-
pub handler: String,
32+
pub apm_enabled: bool,
33+
pub lambda_handler: String,
3434
}
3535

3636
impl Default for Config {
3737
fn default() -> Self {
3838
Config {
39-
apm_enabled: false,
39+
// General
4040
site: "datadoqhq.com".to_string(),
4141
api_key: String::default(),
42+
// Unified Tagging
4243
env: None,
4344
service: None,
4445
version: None,
4546
tags: None,
47+
// Logs
4648
log_level: LogLevel::default(),
4749
serverless_logs_enabled: true,
48-
handler: String::default(),
50+
// APM
51+
apm_enabled: false,
52+
lambda_handler: String::default(),
4953
}
5054
}
5155
}
@@ -59,14 +63,15 @@ pub enum ConfigError {
5963
pub fn get_config(config_directory: &Path) -> Result<Config, ConfigError> {
6064
let path = config_directory.join("datadog.yaml");
6165
let figment = Figment::new()
62-
.merge(Env::prefixed("DD_"))
66+
.merge(Yaml::file(path))
6367
.merge(Env::prefixed("DATADOG_"))
64-
.merge(Yaml::file(path));
68+
.merge(Env::prefixed("DD_"));
6569

6670
let config = figment.extract().map_err(|err| match err.kind {
6771
figment::error::Kind::UnknownField(field, _) => ConfigError::UnsupportedField(field),
6872
_ => ConfigError::ParseError(err.to_string()),
6973
})?;
74+
7075
Ok(config)
7176
}
7277

@@ -107,6 +112,29 @@ pub mod tests {
107112
});
108113
}
109114

115+
#[test]
116+
fn test_precedence() {
117+
figment::Jail::expect_with(|jail| {
118+
jail.clear_env();
119+
jail.create_file(
120+
"datadog.yaml",
121+
r#"
122+
apm_enabled: true
123+
"#,
124+
)?;
125+
jail.set_env("DD_APM_ENABLED", "false");
126+
let config = get_config(Path::new("")).expect("should parse config");
127+
assert_eq!(
128+
config,
129+
Config {
130+
apm_enabled: false,
131+
..Config::default()
132+
}
133+
);
134+
Ok(())
135+
});
136+
}
137+
110138
#[test]
111139
fn test_parse_config_file() {
112140
figment::Jail::expect_with(|jail| {

0 commit comments

Comments
 (0)