chiark / gitweb /
config: Provide a startup hook
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 8 Aug 2021 00:21:07 +0000 (01:21 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 8 Aug 2021 00:21:07 +0000 (01:21 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/client.rs
src/bin/server.rs
src/config.rs

index 646006c36b39db778b7560b2e6c363beb456bf5a..491fec3b9a0818ef54ea31a8941c1d8fca0eac8f 100644 (file)
@@ -302,8 +302,8 @@ async fn run_client<C:HCC>(
 #[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);
index 6bc1df7e92e6ba3d7bcb88dff64470200c20adeb..4869ce877e7473f95de8991108b6abef0939f022 100644 (file)
@@ -16,10 +16,12 @@ pub struct Opts {
 #[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);
 }
index 048a91c88a8bd4994628c7bcf1b9b7838cc5bcb4..3a45eb81928a974d4c3071e4767bb59278a748dc 100644 (file)
@@ -887,9 +887,11 @@ pub fn read(opts: &Opts, end: LinkEnd) -> Vec<InstanceConfig> {
   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()?;
@@ -897,8 +899,9 @@ pub fn startup(progname: &str, end: LinkEnd,
     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);