let opts = <Opts as clap::Parser>::parse();
let (ics,) = config::startup(
"hippotat", LinkEnd::Client,
- &opts.config, &opts.log, |_, ics|
+ &opts.config, &opts.log, |_, ics|
{
PrintConfigOpt(&opts.print_config)
.implement(ics, )?;
Ok(())
- }, |_, ics| {
+ }, |_, ics| async move {
Ok((ics,))
- });
+ }).await;
let hclient = reqwest::Client::builder()
.http1_title_case_headers()
Ok(Some(global_config))
- }, |global_config, ics| {
+ }, |global_config, ics| async {
let global_config = global_config.expect("some instances");
tasks.push((ipif, format!("ipif")));
Ok(())
- });
+ }).await;
if let Some(daemon) = daemon {
daemon.complete();
(server_name, ics)
}
-pub fn startup<F,T,G,U>(progname: &str, end: LinkEnd,
+pub async fn startup<F,T,G,GFut,U>(progname: &str, end: LinkEnd,
opts: &CommonOpts, logopts: &LogOpts,
f: F, g: G) -> U
where F: FnOnce(Option<ServerName>, &[InstanceConfig]) -> Result<T,AE>,
- G: FnOnce(T, Vec<InstanceConfig>) -> Result<U,AE>,
+ G: FnOnce(T, Vec<InstanceConfig>) -> GFut,
+ GFut: Future<Output=Result<U,AE>>,
{
- (||{
+ async {
dedup_eyre_setup()?;
let (server_name, ics) = config::read(opts, end)?;
if ics.is_empty() { throw!(anyhow!("no associations, quitting")); }
logopts.log_init()?;
- let u = g(t, ics)?;
+ let u = g(t, ics).await?;
Ok::<_,AE>(u)
- })().unwrap_or_else(|e| {
+ }.await.unwrap_or_else(|e| {
eprintln!("{}: startup error: {}", progname, &e);
process::exit(8);
})