pub struct State { /* private fields */ }
Expand description
Provides storage for request state, and stores one item of each type. The types used for
storage must implement the StateData
trait to allow its storage, which is usually done
by adding #[derive(StateData)]
on the type in question.
Examples
use gotham::state::{State, StateData};
#[derive(StateData)]
struct MyStruct {
value: i32,
}
state.put(MyStruct { value: 1 });
assert_eq!(state.borrow::<MyStruct>().value, 1);
Implementations§
source§impl State
impl State
sourcepub fn from_request(req: Request<Body>, client_addr: SocketAddr) -> Self
pub fn from_request(req: Request<Body>, client_addr: SocketAddr) -> Self
Instantiate a new State
for a given Request
. This is primarily useful if you’re calling
Gotham from your own Hyper service.
sourcepub fn put<T>(&mut self, t: T)where
T: StateData,
pub fn put<T>(&mut self, t: T)where
T: StateData,
Puts a value into the State
storage. One value of each type is retained. Successive calls
to put
will overwrite the existing value of the same type.
Examples
state.put(MyStruct { value: 1 });
assert_eq!(state.borrow::<MyStruct>().value, 1);
state.put(AnotherStruct { value: "a string" });
state.put(MyStruct { value: 100 });
assert_eq!(state.borrow::<AnotherStruct>().value, "a string");
assert_eq!(state.borrow::<MyStruct>().value, 100);
sourcepub fn has<T>(&self) -> boolwhere
T: StateData,
pub fn has<T>(&self) -> boolwhere
T: StateData,
Determines if the current value exists in State
storage.
Examples
state.put(MyStruct { value: 1 });
assert!(state.has::<MyStruct>());
assert_eq!(state.borrow::<MyStruct>().value, 1);
assert!(!state.has::<AnotherStruct>());
sourcepub fn try_borrow<T>(&self) -> Option<&T>where
T: StateData,
pub fn try_borrow<T>(&self) -> Option<&T>where
T: StateData,
Tries to borrow a value from the State
storage.
Examples
state.put(MyStruct { value: 1 });
assert!(state.try_borrow::<MyStruct>().is_some());
assert_eq!(state.try_borrow::<MyStruct>().unwrap().value, 1);
assert!(state.try_borrow::<AnotherStruct>().is_none());
sourcepub fn try_borrow_mut<T>(&mut self) -> Option<&mut T>where
T: StateData,
pub fn try_borrow_mut<T>(&mut self) -> Option<&mut T>where
T: StateData,
Tries to mutably borrow a value from the State
storage.
Examples
state.put(MyStruct { value: 100 });
if let Some(a) = state.try_borrow_mut::<MyStruct>() {
a.value += 10;
}
assert_eq!(state.borrow::<MyStruct>().value, 110);
assert!(state.try_borrow_mut::<AnotherStruct>().is_none());
sourcepub fn borrow_mut<T>(&mut self) -> &mut Twhere
T: StateData,
pub fn borrow_mut<T>(&mut self) -> &mut Twhere
T: StateData,
Mutably borrows a value from the State
storage.
Panics
If a value of type T
is not present in State
.
Examples
state.put(MyStruct { value: 100 });
{
let a = state.borrow_mut::<MyStruct>();
a.value += 10;
}
assert_eq!(state.borrow::<MyStruct>().value, 110);
assert!(state.try_borrow_mut::<AnotherStruct>().is_none());
sourcepub fn try_take<T>(&mut self) -> Option<T>where
T: StateData,
pub fn try_take<T>(&mut self) -> Option<T>where
T: StateData,
Tries to move a value out of the State
storage and return ownership.
Examples
state.put(MyStruct { value: 110 });
assert_eq!(state.try_take::<MyStruct>().unwrap().value, 110);
assert!(state.try_take::<MyStruct>().is_none());
assert!(state.try_borrow_mut::<MyStruct>().is_none());
assert!(state.try_borrow::<MyStruct>().is_none());
assert!(state.try_take::<AnotherStruct>().is_none());
sourcepub fn take<T>(&mut self) -> Twhere
T: StateData,
pub fn take<T>(&mut self) -> Twhere
T: StateData,
Moves a value out of the State
storage and returns ownership.
Panics
If a value of type T
is not present in State
.
Examples
state.put(MyStruct { value: 110 });
assert_eq!(state.take::<MyStruct>().value, 110);
assert!(state.try_take::<MyStruct>().is_none());
assert!(state.try_borrow_mut::<MyStruct>().is_none());
assert!(state.try_borrow::<MyStruct>().is_none());