]> piware.de Git - learn-rust.git/commitdiff
warp-server: Move handlers into proper functions
authorMartin Pitt <martin@piware.de>
Sun, 6 Nov 2022 10:53:58 +0000 (11:53 +0100)
committerMartin Pitt <martin@piware.de>
Sun, 6 Nov 2022 11:07:20 +0000 (12:07 +0100)
This is easier to follow, and makes it more obvious what the types are.

warp-server/src/main.rs

index c8ecdf2bb95d28b2e8f9236cc3e959b2b28e7810..06977e62cf4e50911b5e00ba6f866c2daa49dc52 100644 (file)
@@ -1,32 +1,38 @@
 use futures_util::{FutureExt, StreamExt};
 use warp::Filter;
 
+// GET /hello/warp => 200 OK with body "Hello, warp!"
+async fn hello(name: String, agent: String) -> Result<impl warp::Reply, warp::Rejection> {
+    Ok(format!("Hello, {} from {}!", name, agent))
+}
+
+// websocat ws://127.0.0.1:3030/ws-echo
+async fn ws_echo_connected(websocket: warp::ws::WebSocket) {
+    // echo all messages back
+    let (tx, rx) = websocket.split();
+    rx.forward(tx).map(|result| {
+        if let Err(e) = result {
+            log::warn!("websocket error: {:?}", e);
+        }
+    }).await;
+}
+
 #[tokio::main]
 async fn main() {
     env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init();
 
-    // GET /hello/warp => 200 OK with body "Hello, warp!"
     let hello = warp::path!("hello" / String)
         .and(warp::header::<String>("user-agent"))
-        .map(|name, agent| format!("Hello, {} from {}!", name, agent));
+        .and_then(hello);
 
-    // websocat ws://127.0.0.1:3030/ws-echo
-    let echo = warp::path("ws-echo")
+    let ws_echo = warp::path("ws-echo")
         .and(warp::ws())
         .map(|ws: warp::ws::Ws| {
-            ws.on_upgrade(|websocket| {
-                // echo all messages back
-                let (tx, rx) = websocket.split();
-                rx.forward(tx).map(|result| {
-                    if let Err(e) = result {
-                        log::warn!("websocket error: {:?}", e);
-                    }
-                })
-            })
+            ws.on_upgrade(|websocket| { ws_echo_connected(websocket) })
         });
 
     let api = hello
-        .or(echo)
+        .or(ws_echo)
         .with(warp::log("warp-server"));
 
     warp::serve(api)