From: Ian Jackson Date: Sun, 2 Feb 2025 13:36:24 +0000 (+0000) Subject: Prep for hyper 1: Reorganise service_fn call X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=3227841d7960e4cf3f5a19cc705f5cd89da4f0a2;p=hippotat.git Prep for hyper 1: Reorganise service_fn call 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 --- diff --git a/server/server.rs b/server/server.rs index 0ff718b..f4bcb3a 100644 --- a/server/server.rs +++ b/server/server.rs @@ -258,14 +258,20 @@ async fn async_main(opts: Opts, daemon: Option) { 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) } }