chiark / gitweb /
Config inspection: make InspectableConfig impl dyn despatch
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 10 Jan 2023 00:01:00 +0000 (00:01 +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>
src/config.rs

index 13605d584c913a9303122ccb6867821f8eab841d..1ecc4794fc012835c0c024940c2673ce4290e414 100644 (file)
@@ -95,12 +95,16 @@ pub trait InspectableConfig {
                  -> 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));
+  fn implement_print_config(&self, key: &str) where Self: Sized {
+    #[throws(AE)]
+    fn inner(self_: &dyn InspectableConfig, key: &str) {
+      if let Some(inspectable) = self_.inspect_key(key) {
+        println!("{}", DisplayInspectable(inspectable));
+      } else {
+        throw!(anyhow!("unknown config key {:?}", key));
+      }
     }
+    inner(self, key)?;
   }
 }