@@ -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
3636impl 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 {
5963pub 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