}
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,
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);
}
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())
})