X-Git-Url: https://piware.de/gitweb/?p=learn-rust.git;a=blobdiff_plain;f=warp-server%2Fsrc%2Fmain.rs;fp=warp-server%2Fsrc%2Fmain.rs;h=06977e62cf4e50911b5e00ba6f866c2daa49dc52;hp=c8ecdf2bb95d28b2e8f9236cc3e959b2b28e7810;hb=24b1b69d58d85224cb8e5c8965b5a9cd545f0ffb;hpb=0791d9aed3be3e14cd24c622283b435aa0b7818f diff --git a/warp-server/src/main.rs b/warp-server/src/main.rs index c8ecdf2..06977e6 100644 --- a/warp-server/src/main.rs +++ b/warp-server/src/main.rs @@ -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 { + 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::("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)