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
sourceimpl 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) -> bool where
T: StateData,
pub fn has<T>(&self) -> bool where
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 T where
T: StateData,
pub fn borrow_mut<T>(&mut self) -> &mut T where
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) -> T where
T: StateData,
pub fn take<T>(&mut self) -> T where
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());
Auto Trait Implementations
impl !RefUnwindSafe for State
impl Send for State
impl !Sync for State
impl Unpin for State
impl !UnwindSafe for State
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more