let opts = <Opts as clap::Parser>::parse();
let (ics,) = config::startup("hippotat", LinkEnd::Client,
&opts.config, &opts.log, |ics| {
- implement_print_config(&mut ics.iter(), &opts.print_config)?;
+ PrintConfigOpt(&&opts.print_config)
+ .implement(&mut ics.iter(), )?;
Ok((ics,))
});
{
let global_config = config::InstanceConfigGlobal::from(&ics);
- implement_print_config(&mut iter::once(&global_config),
- &opts.print_config)?;
+ PrintConfigOpt(&opts.print_config)
+ .implement(&mut iter::once(&global_config))?;
if let Some(pidfile_path) = opts.pidfile.as_ref() {
(||{
}
}
-#[throws(AE)]
-pub fn implement_print_config<'c, C: InspectableConfig + 'c>(
- configs: impl Iterator<Item=&'c C>,
- arg: &Option<String>,
-) {
+#[derive(Debug,Clone,Copy)]
+pub struct PrintConfigOpt<'a>(pub &'a Option<String>);
+
+impl PrintConfigOpt<'_> {
#[throws(AE)]
- pub fn print_one_config<'f>(
- config: &dyn InspectableConfig,
+ pub fn implement<'c, C: InspectableConfig + 'c>(
+ self,
+ configs: impl Iterator<Item=&'c C>,
+ ) {
+ if let Some(arg) = self.0 {
+ for config in configs {
+ Self::print_one_config(arg, config)?;
+ }
+ process::exit(0);
+ }
+ }
+
+ #[throws(AE)]
+ fn print_one_config(
arg: &str,
+ config: &dyn InspectableConfig,
) {
let output = arg
.split(',')
.join(" ");
println!("{}", output);
}
-
- if let Some(arg) = arg {
- for config in configs {
- print_one_config(config, arg)?;
- }
- process::exit(0);
- }
}
pub trait InspectableConfigValue {
pub use eyre::WrapErr;
pub use eyre::Error as AE;
-pub use crate::config::{self, InstanceConfig, implement_print_config};
+pub use crate::config::{self, InstanceConfig, PrintConfigOpt};
pub use crate::config::{InspectableConfig, InspectableConfigValue};
pub use crate::config::{DisplayInspectable, U32Ext as _};
pub use crate::impl_inspectable_config_value;