#[tokio::main]
async fn main() {
let opts = Opts::from_args();
- let (ics,) = config::startup("hippotat", LinkEnd::Client,
- &opts.config, &opts.log);
+ let (ics,()) = config::startup("hippotat", LinkEnd::Client,
+ &opts.config, &opts.log, |_|Ok(()));
let https = HttpsConnector::new();
let hclient = hyper::Client::builder().build::<_, hyper::Body>(https);
#[tokio::main]
async fn main() {
let opts = Opts::from_args();
- let (ics,) = config::startup("hippotatd", LinkEnd::Server,
- &opts.config, &opts.log);
-
- let global = config::InstanceConfigGlobal::from(&ics);
+ let (ics,global) = config::startup("hippotatd", LinkEnd::Server,
+ &opts.config, &opts.log, |ics|
+ {
+ let global = config::InstanceConfigGlobal::from(&ics);
+ Ok(global)
+ });
dbg!(ics, global);
}
ics
}
-pub fn startup(progname: &str, end: LinkEnd,
- opts: &Opts, logopts: &LogOpts)
- -> (Vec<InstanceConfig>,)
+pub fn startup<F,T>(progname: &str, end: LinkEnd,
+ opts: &Opts, logopts: &LogOpts,
+ f: F)
+ -> (Vec<InstanceConfig>,T)
+ where F: FnOnce(&[InstanceConfig]) -> Result<T,AE>
{
(||{
dedup_eyre_setup()?;
if ics.is_empty() { throw!(anyhow!("no associations, quitting")); }
logopts.log_init()?;
+ let t = f(&ics)?;
- Ok::<_,AE>((ics,))
+ Ok::<_,AE>((ics,t))
})().unwrap_or_else(|e| {
eprintln!("{}: startup error: {}", progname, &e);
process::exit(8);