chiark / gitweb /
wip thunk etc.
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 12 Nov 2020 00:22:15 +0000 (00:22 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 12 Nov 2020 00:22:15 +0000 (00:22 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/otter.rs
src/utils.rs

index 5efb32088ebef0d3970d27ad82440c967e147939..57e42f2f791947cb143e3ac9b73f0be778ffd69c 100644 (file)
@@ -128,7 +128,8 @@ fn parse_args<T:Default,U>(
   mem::drop(ap);
   let completed  =
     completer(parsed).unwrap_or_else(|e:ArgumentParseError| {
-      let ap = apmaker(&mut default());
+      let mut def = default();
+      let ap = apmaker(&mut def);
       ap.error(&us, &e.0, &mut stderr);
       exit(EXIT_USAGE);
     });
@@ -197,10 +198,10 @@ fn main() {
     let config = Thunk::new(||{
       ServerConfig::read(config_filename.as_ref().map(String::as_str))
         .context("read config file")?;
-      Ok(otter::global::config())
+      Ok::<_,AE>(otter::global::config())
     });
     let socket_path = socket_path.map(Ok::<_,APE>).unwrap_or_else(||{
-      Ok(config?.command_socket.clone())
+      Ok((*config)?.command_socket.clone())
     })?;
     Ok((subcommand, subargs, MainOpts {
       account,
index 87a98572becb2f7976ba5c5c4a0cc763c45b58dc..26196c2f3beb5bf70f7f76de9e95bd268fdea92a 100644 (file)
@@ -92,4 +92,12 @@ impl<T: Sync, F: Sync + FnOnce() -> T> Deref for Thunk<T, F> {
   }
 }
 
+impl<Y: Sync, E: Sync, F: Sync + FnOnce() -> Result<Y,E>>
+  From<Thunk<Result<Y,E>, F>> for Result<Y,E>
+{
+  fn from(thunk: Thunk<Result<Y,E>, F>) -> Result<Y,E> {
+    Thunk::into_inner(thunk)
+  }
+}
+
 // todo: DerefMut