]> piware.de Git - learn-rust.git/blob - warp-server/src/main.rs
warp-server: Add logging
[learn-rust.git] / warp-server / src / main.rs
1 use futures_util::{FutureExt, StreamExt};
2 use warp::Filter;
3
4 #[tokio::main]
5 async fn main() {
6     env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init();
7
8     // GET /hello/warp => 200 OK with body "Hello, warp!"
9     let hello = warp::path!("hello" / String)
10         .and(warp::header::<String>("user-agent"))
11         .map(|name, agent| format!("Hello, {} from {}!", name, agent));
12
13     // websocat ws://127.0.0.1:3030/ws-echo
14     let echo = warp::path("ws-echo")
15         .and(warp::ws())
16         .map(|ws: warp::ws::Ws| {
17             ws.on_upgrade(|websocket| {
18                 // echo all messages back
19                 let (tx, rx) = websocket.split();
20                 rx.forward(tx).map(|result| {
21                     if let Err(e) = result {
22                         eprintln!("websocket error: {:?}", e);
23                     }
24                 })
25             })
26         });
27
28     let api = hello
29         .or(echo)
30         .with(warp::log("warp-server"));
31
32     warp::serve(api)
33         .run(([127, 0, 0, 1], 3030))
34         .await;
35 }