process::exit(0);
}
if let Some(arg) = &opts.print_config {
- for ic in &ics {
- implement_print_config(ic, arg, &|k| Some(match k {
- "link" => &ic.link,
- "server" => &ic.link.server,
- "client" => &ic.link.client,
- k => return ic.inspect_key(k),
- }))?;
- }
+ implement_print_config(&mut ics.iter(), arg, &|ic, k| Some(match k {
+ "link" => &ic.link,
+ "server" => &ic.link.server,
+ "client" => &ic.link.client,
+ k => return ic.inspect_key(k),
+ }))?;
process::exit(0);
}
let global_config = config::InstanceConfigGlobal::from(&ics);
if let Some(arg) = &opts.print_config {
- implement_print_config(&global_config, arg, &|_| None)?;
+ implement_print_config(&mut iter::once(&global_config),
+ arg, &|_,__| None)?;
process::exit(0);
}
}
#[throws(AE)]
-pub fn implement_print_config<'f>(
- config: &dyn InspectableConfig,
+pub fn implement_print_config<'c, C: InspectableConfig>(
+ configs: impl Iterator<Item=&'c C>,
arg: &str,
- extra_key: &dyn Fn(&str) -> Option<&'f dyn InspectableConfigValue>
+ extra_key: &dyn Fn(&'c C, &str) -> Option<&'c dyn InspectableConfigValue>
) {
- let output = arg
- .split(',')
- .map(|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())
- })
- .collect::<Result<Vec<_>,_>>()?
- .join(" ");
- println!("{}", output);
+ #[throws(AE)]
+ pub fn print_one_config<'f>(
+ config: &dyn InspectableConfig,
+ arg: &str,
+ extra_key: &dyn Fn(&str) -> Option<&'f dyn InspectableConfigValue>
+ ) {
+ let output = arg
+ .split(',')
+ .map(|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())
+ })
+ .collect::<Result<Vec<_>,_>>()?
+ .join(" ");
+ println!("{}", output);
+ }
+
+ for config in configs {
+ print_one_config(config, arg, &|k| extra_key(config, k))?;
+ }
}
pub trait InspectableConfigValue {