chiark / gitweb /
Config inspection: Centralise inspectable lookup
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 10 Jan 2023 01:30:23 +0000 (01:30 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 11 Jan 2023 02:12:41 +0000 (02:12 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
client/client.rs
server/server.rs
src/config.rs

index cf7a935cb8a56b1f0a891d46496d50d819ec6a2f..7aaebfb2b8339665a2bdcfed836468df9764dd3e 100644 (file)
@@ -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,
index 0b9ffedc7f1fd5c76948721c688fe4854118f639..231e8ef5c6618a5a6ea5a81b08922c2a87cf2165 100644 (file)
@@ -161,7 +161,7 @@ async fn async_main(opts: Opts, daemon: Option<Daemoniser>) {
     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);
     }
 
index c88832e1583073bf83b923e9c36d86e933a30e1d..8f95a5c0775b1266dc298c5b2ff8b20cf753f102 100644 (file)
@@ -90,20 +90,22 @@ pub struct Opts {
   pub extra_config: Vec<PathBuf>,
 }
 
-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())
     })