diff --git a/src/core/config/mod.rs b/src/core/config/mod.rs index b40ebb65febe218b9082aacc5b49e00cd3ebee01..a689701aa4f349ac54a63656f7d8ae786e1ef4b9 100644 --- a/src/core/config/mod.rs +++ b/src/core/config/mod.rs @@ -405,7 +405,7 @@ struct ListeningAddr { impl Config { /// Initialize config - pub fn new(path: Option<PathBuf>) -> Result<Self> { + pub fn new(path: &Option<PathBuf>) -> Result<Self> { let raw_config = if let Some(config_file_env) = Env::var("CONDUIT_CONFIG") { Figment::new() .merge(Toml::file(config_file_env).nested()) diff --git a/src/main/clap.rs b/src/main/clap.rs index 6ce164f535120d7f0aa18052273b4ff0530fddf9..e82fea16ee10cf104dd95836ab22ea5481a09c6d 100644 --- a/src/main/clap.rs +++ b/src/main/clap.rs @@ -3,6 +3,7 @@ use std::path::PathBuf; use clap::Parser; +use conduit::{Config, Result}; /// Commandline arguments #[derive(Parser, Debug)] @@ -15,4 +16,13 @@ pub(crate) struct Args { /// Parse commandline arguments into structured data #[must_use] -pub(crate) fn parse() -> Args { Args::parse() } +pub(super) fn parse() -> Args { Args::parse() } + +/// Synthesize any command line options with configuration file options. +pub(crate) fn update(config: &mut Config, args: &Args) -> Result<()> { + // Indicate the admin console should be spawned automatically if the + // configuration file hasn't already. + config.admin_console_automatic |= args.console.unwrap_or(false); + + Ok(()) +} diff --git a/src/main/main.rs b/src/main/main.rs index 959e861001f37dfff68f33bbe5e09000876086ea..b13e117db97b2b4c97d8ff3e03064bc20e11a2f2 100644 --- a/src/main/main.rs +++ b/src/main/main.rs @@ -33,7 +33,7 @@ fn main() -> Result<(), Error> { .build() .expect("built runtime"); - let server: Arc<Server> = Server::build(args, Some(runtime.handle()))?; + let server: Arc<Server> = Server::build(&args, Some(runtime.handle()))?; runtime.spawn(signal::signal(server.clone())); runtime.block_on(async_main(&server))?; diff --git a/src/main/server.rs b/src/main/server.rs index 73c06f0cae721de0a686969d9b7f6ed46aeab541..b1cd6936eb1b359209cfb78a54bf6216744971ac 100644 --- a/src/main/server.rs +++ b/src/main/server.rs @@ -21,8 +21,9 @@ pub(crate) struct Server { } impl Server { - pub(crate) fn build(args: Args, runtime: Option<&runtime::Handle>) -> Result<Arc<Self>, Error> { - let config = Config::new(args.config)?; + pub(crate) fn build(args: &Args, runtime: Option<&runtime::Handle>) -> Result<Arc<Self>, Error> { + let mut config = Config::new(&args.config)?; + crate::clap::update(&mut config, args)?; #[cfg(feature = "sentry_telemetry")] let sentry_guard = crate::sentry::init(&config);