gotham/state/
data.rs

1use std::any::Any;
2
3use cookie::CookieJar;
4use hyper::upgrade::OnUpgrade;
5use hyper::{Body, HeaderMap, Method, Uri, Version};
6
7use crate::helpers::http::request::path::RequestPathSegments;
8use crate::state::request_id::RequestId;
9
10#[cfg(feature = "derive")]
11pub use gotham_derive::StateData;
12
13/// A marker trait for types that can be stored in `State`.
14///
15/// This is typically implemented using `#[derive(StateData)]`.
16///
17/// ```rust
18/// # use gotham::state::{FromState, State};
19/// use gotham::state::StateData;
20///
21/// #[derive(StateData)]
22/// struct MyStateData {
23///     x: u32,
24/// }
25/// # fn main() {
26/// #   State::with_new(|state| {
27/// #       state.put(MyStateData { x: 1 });
28/// #       assert_eq!(MyStateData::borrow_from(state).x, 1);
29/// #   });
30/// # }
31/// ```
32pub trait StateData: Any + Send {}
33
34impl StateData for Body {}
35impl StateData for Method {}
36impl StateData for Uri {}
37impl StateData for Version {}
38impl StateData for HeaderMap {}
39impl StateData for CookieJar {}
40impl StateData for OnUpgrade {}
41
42impl StateData for RequestPathSegments {}
43impl StateData for RequestId {}