chiark / gitweb /
Make config::startup()'s G callback async
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 2 Feb 2025 12:24:26 +0000 (12:24 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 2 Feb 2025 13:59:50 +0000 (13:59 +0000)
We're going to call tokio::net::TcpListener::bind(),
which is async.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
client/client.rs
server/server.rs
src/config.rs

index 75c45626e18e9207e8a413be46751e6fc3093ee3..c002a43e8f622206fad7b67c387c0901c7e264e4 100644 (file)
@@ -344,14 +344,14 @@ async fn main() {
   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()
index a5c71a302e9dbef45d920eba7610c84c6638a77d..1aa6f2664be9447e69168069864f3a0f9064cf02 100644 (file)
@@ -190,7 +190,7 @@ async fn async_main(opts: Opts, daemon: Option<Daemoniser>) {
 
     Ok(Some(global_config))
 
-  }, |global_config, ics| {
+  }, |global_config, ics| async {
 
     let global_config = global_config.expect("some instances");
 
@@ -312,7 +312,7 @@ async fn async_main(opts: Opts, daemon: Option<Daemoniser>) {
     tasks.push((ipif, format!("ipif")));
 
     Ok(())
-  });
+  }).await;
 
   if let Some(daemon) = daemon {
     daemon.complete();
index 0a38080f1ae6e82dba803c349a670e2daceff7af..df80d1ea870f56d55faf57ed85160abe9cffa8d7 100644 (file)
@@ -1065,13 +1065,14 @@ pub fn read(opts: &CommonOpts, end: LinkEnd)
   (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)?;
 
@@ -1079,10 +1080,10 @@ where F: FnOnce(Option<ServerName>, &[InstanceConfig]) -> Result<T,AE>,
     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);
   })