chiark / gitweb /
Config inspection: Move --print-config implementation into trait
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 9 Jan 2023 19:07:52 +0000 (19:07 +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>
server/server.rs
src/config.rs

index 46bc7da0464d74cd4cdb96b08637510831c8a550..ff69b0ba6dbb459183bcb6c064fe103627874b9a 100644 (file)
@@ -160,13 +160,9 @@ async fn async_main(opts: Opts, daemon: Option<Daemoniser>) {
   {
     let global_config = config::InstanceConfigGlobal::from(&ics);
 
-    if let Some(key) = opts.print_config.as_ref() {
-      if let Some(inspectable) = global_config.inspect_key(key) {
-        println!("{}", DisplayInspectable(inspectable));
-        process::exit(0);
-      } else {
-        throw!(anyhow!("unknown config key {:?}", key));
-      }
+    if let Some(arg) = &opts.print_config {
+      global_config.implement_print_config(arg)?;
+      process::exit(0);
     }
 
     if let Some(pidfile_path) = opts.pidfile.as_ref() {
index 7cc9adf8d9bc919624db43adebf27909a1be8389..13605d584c913a9303122ccb6867821f8eab841d 100644 (file)
@@ -93,6 +93,15 @@ pub struct Opts {
 pub trait InspectableConfig {
   fn inspect_key(&self, field: &'_ str)
                  -> Option<&dyn InspectableConfigValue>;
+
+  #[throws(AE)]
+  fn implement_print_config(&self, key: &str) {
+    if let Some(inspectable) = self.inspect_key(key) {
+      println!("{}", DisplayInspectable(inspectable));
+    } else {
+      throw!(anyhow!("unknown config key {:?}", key));
+    }
+  }
 }
 
 pub trait InspectableConfigValue {