From bd43364949bd46a653a66a6c5c7f8307cedcf9a4 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 10 Jan 2023 01:30:23 +0000 Subject: [PATCH] Config inspection: Centralise inspectable lookup Signed-off-by: Ian Jackson --- client/client.rs | 2 +- server/server.rs | 2 +- src/config.rs | 8 +++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/client/client.rs b/client/client.rs index cf7a935..7aaebfb 100644 --- a/client/client.rs +++ b/client/client.rs @@ -345,7 +345,7 @@ async fn main() { } if let Some(arg) = &opts.print_config { for ic in &ics { - implement_print_config(arg, &|k| Some(match k { + implement_print_config(ic, arg, &|k| Some(match k { "link" => &ic.link, "server" => &ic.link.server, "client" => &ic.link.client, diff --git a/server/server.rs b/server/server.rs index 0b9ffed..231e8ef 100644 --- a/server/server.rs +++ b/server/server.rs @@ -161,7 +161,7 @@ async fn async_main(opts: Opts, daemon: Option) { let global_config = config::InstanceConfigGlobal::from(&ics); if let Some(arg) = &opts.print_config { - implement_print_config(arg, &|k| global_config.inspect_key(k))?; + implement_print_config(&global_config, arg, &|_| None)?; process::exit(0); } diff --git a/src/config.rs b/src/config.rs index c88832e..8f95a5c 100644 --- a/src/config.rs +++ b/src/config.rs @@ -90,20 +90,22 @@ pub struct Opts { pub extra_config: Vec, } -pub trait InspectableConfig { +pub trait InspectableConfig: Debug { fn inspect_key(&self, field: &'_ str) -> Option<&dyn InspectableConfigValue>; } #[throws(AE)] pub fn implement_print_config<'f>( + config: &dyn InspectableConfig, arg: &str, - inspect_key: &dyn Fn(&str) -> Option<&'f dyn InspectableConfigValue> + extra_key: &dyn Fn(&str) -> Option<&'f dyn InspectableConfigValue> ) { let output = arg .split(',') .map(|key| { - let insp = inspect_key(key) + let insp = config.inspect_key(key) + .or_else(|| extra_key(key)) .ok_or_else(|| anyhow!("unknown config key {:?}", key))?; Ok::<_,AE>(DisplayInspectable(insp).to_string()) }) -- 2.30.2