mirror of
				https://github.com/nitnelave/lldap.git
				synced 2023-04-12 14:25:13 +00:00 
			
		
		
		
	Fix cli arg precedence and finish config wiring
This commit is contained in:
		
							parent
							
								
									0b6f482e51
								
							
						
					
					
						commit
						009ffd793b
					
				@ -1,2 +1,2 @@
 | 
				
			|||||||
# LLDAP configuration
 | 
					# LLDAP configuration
 | 
				
			||||||
some_text = "ok boomer"
 | 
					some_text = "ok boomer from toml file"
 | 
				
			||||||
@ -1,6 +1,7 @@
 | 
				
			|||||||
use anyhow::Result;
 | 
					use anyhow::Result;
 | 
				
			||||||
use figment::{
 | 
					use figment::{
 | 
				
			||||||
    providers::{Env, Format, Serialized, Toml},
 | 
					    providers::{Env, Format, Serialized, Toml},
 | 
				
			||||||
 | 
					    util::map,
 | 
				
			||||||
    Figment,
 | 
					    Figment,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use serde::{Deserialize, Serialize};
 | 
					use serde::{Deserialize, Serialize};
 | 
				
			||||||
@ -14,23 +15,33 @@ pub struct Configuration {
 | 
				
			|||||||
    pub some_text: String,
 | 
					    pub some_text: String,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Configuration {
 | 
					impl Default for Configuration {
 | 
				
			||||||
    fn from_cli(cli_opts: CLIOpts) -> Self {
 | 
					    fn default() -> Self {
 | 
				
			||||||
        Configuration {
 | 
					        Configuration {
 | 
				
			||||||
            log_level_verbose: cli_opts.verbose,
 | 
					            log_level_verbose: false,
 | 
				
			||||||
            secret_pepper: String::from("secretsecretpepper"),
 | 
					            secret_pepper: String::from("secretsecretpepper"),
 | 
				
			||||||
            some_text: String::new(),
 | 
					            some_text: String::new(),
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl Configuration {
 | 
				
			||||||
 | 
					    fn from_cli(cli_opts: CLIOpts) -> Figment {
 | 
				
			||||||
 | 
					        let config_opts_from_cli = map! {
 | 
				
			||||||
 | 
					            "log_level_verbose" => cli_opts.verbose
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Figment::new().join(Serialized::defaults(config_opts_from_cli))
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn init(cli_opts: CLIOpts) -> Result<Configuration> {
 | 
					pub fn init(cli_opts: CLIOpts) -> Result<Configuration> {
 | 
				
			||||||
    // FIXME cli arguments are less prioritary than toml config file or env... Not good.
 | 
					    let config_file = cli_opts.config_file.clone();
 | 
				
			||||||
    let config: Configuration = Figment::from(Serialized::defaults(Configuration::from_cli(
 | 
					
 | 
				
			||||||
        cli_opts.clone(),
 | 
					    let config: Configuration = Figment::from(Serialized::defaults(Configuration::default()))
 | 
				
			||||||
    )))
 | 
					        .merge(Toml::file(config_file))
 | 
				
			||||||
    .merge(Toml::file(cli_opts.config_file))
 | 
					 | 
				
			||||||
        .merge(Env::prefixed("LLDAP_"))
 | 
					        .merge(Env::prefixed("LLDAP_"))
 | 
				
			||||||
 | 
					        .merge(Configuration::from_cli(cli_opts))
 | 
				
			||||||
        .extract()?;
 | 
					        .extract()?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Ok(config)
 | 
					    Ok(config)
 | 
				
			||||||
 | 
				
			|||||||
@ -3,15 +3,23 @@ use anyhow::Context;
 | 
				
			|||||||
use tracing::subscriber::set_global_default;
 | 
					use tracing::subscriber::set_global_default;
 | 
				
			||||||
use tracing_log::LogTracer;
 | 
					use tracing_log::LogTracer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn init(_config: Configuration) -> anyhow::Result<()> {
 | 
					pub fn init(config: Configuration) -> anyhow::Result<()> {
 | 
				
			||||||
    // TODO: use config.log_level_verbose to set level
 | 
					    let max_log_level = log_level_from_config(config);
 | 
				
			||||||
 | 
					 | 
				
			||||||
    let subscriber = tracing_subscriber::fmt()
 | 
					    let subscriber = tracing_subscriber::fmt()
 | 
				
			||||||
        .with_timer(tracing_subscriber::fmt::time::time())
 | 
					        .with_timer(tracing_subscriber::fmt::time::time())
 | 
				
			||||||
        .with_target(false)
 | 
					        .with_target(false)
 | 
				
			||||||
        .with_level(true)
 | 
					        .with_level(true)
 | 
				
			||||||
 | 
					        .with_max_level(max_log_level)
 | 
				
			||||||
        .finish();
 | 
					        .finish();
 | 
				
			||||||
    LogTracer::init().context("Failed to set logger")?;
 | 
					    LogTracer::init().context("Failed to set logger")?;
 | 
				
			||||||
    set_global_default(subscriber).context("Failed to set subscriber")?;
 | 
					    set_global_default(subscriber).context("Failed to set subscriber")?;
 | 
				
			||||||
    Ok(())
 | 
					    Ok(())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn log_level_from_config(config: Configuration) -> tracing::Level {
 | 
				
			||||||
 | 
					    if config.log_level_verbose {
 | 
				
			||||||
 | 
					        tracing::Level::DEBUG
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        tracing::Level::INFO
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user