//! The same server as `examples/server.rs`, mounted in an axum router next to //! ordinary HTTP routes. use axum::{Router, extract::WebSocketUpgrade, response::Response, routing::get}; use serde::{Deserialize, Serialize}; use session_rs::{Method, Session}; #[derive(Debug, Serialize, Deserialize)] struct Data; impl Method for Data { const NAME: &'static str = "data"; type Request = String; type Response = String; type Error = String; } async fn ws(upgrade: WebSocketUpgrade) -> Response { upgrade.max_message_size(1 << 20).on_upgrade(async |socket| { let session = Session::from_axum(socket); session .on_request::(async |_, req| { println!("Msg from client: {req}"); Ok(format!("Hello from axum, you said {req:?}")) }) .await; session.start_receiver(); }) } #[tokio::main] async fn main() -> std::io::Result<()> { let app = Router::new() .route("/", get(ws)) .route("/health", get(async || "ok")); let listener = tokio::net::TcpListener::bind("127.0.0.1:8080").await?; axum::serve(listener, app).await }