chiark / gitweb /
Prep for hyper 1: Reorganise service_fn call
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 2 Feb 2025 13:36:24 +0000 (13:36 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 2 Feb 2025 13:56:34 +0000 (13:56 +0000)
We're going to want this to be more static.  The future-lifted map
doesn't have the right lifetimes.  Instead, use an async block
and un-lifted unwrap_or_else.

This will reduce the size of the eventual diff.

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

index 0ff718b2435665a410fe73d58b10354af6a1d69d..f4bcb3a6c07e80862c600e9f4d70333c0fd60017 100644 (file)
@@ -258,14 +258,20 @@ async fn async_main(opts: Opts, daemon: Option<Daemoniser>) {
           let global = global.clone();
           let caddr = Arc::new(format!("[{}]", conn.remote_addr()));
 
-          let service = hyper::service::service_fn(move |req| {
-            AssertUnwindSafe(
-              sweb::handle(caddr.clone(), global.clone(), req)
-            )
-              .catch_unwind()
-              .map(|r| r.unwrap_or_else(|_|{
-                crash(Err("panicked".into()), "webserver request task")
-              }))
+          let service = hyper::service::service_fn({
+            move |req| {
+              let global = global.clone();
+              let caddr = caddr.clone();
+              async move {
+                AssertUnwindSafe(
+                  sweb::handle(caddr, global, req)
+                )
+                  .catch_unwind().await
+                  .unwrap_or_else(|_| {
+                    crash(Err("panicked".into()), "webserver request task")
+                  })
+              }
+            }
           });
           async { Ok::<_, Void>(service) }
         }