use gotham::state::FromState as _; #[derive( serde::Deserialize, gotham_derive::StateData, gotham_derive::StaticResponseExtender, )] pub struct QueryParams { username: Option, } #[derive(serde::Serialize)] struct Response { username: Option, } pub fn run( mut state: gotham::state::State, ) -> (gotham::state::State, hyper::Response) { let username = { let query_params = QueryParams::borrow_from(&state); query_params.username.clone() }; let session = gotham::middleware::session::SessionData::< crate::web::SessionData, >::borrow_mut_from(&mut state); session.username = username.clone(); ( state, hyper::Response::new(hyper::Body::from( serde_json::to_string(&Response { username }).unwrap(), )), ) }