Struct gotham::state::State

source ·
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§

Instantiate a new State for a given Request. This is primarily useful if you’re calling Gotham from your own Hyper service.

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);

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>());

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());

Borrows a value from the State storage.

Panics

If a value of type T is not present in State.

Examples
state.put(MyStruct { value: 1 });
assert_eq!(state.borrow::<MyStruct>().value, 1);

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());

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());

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());

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§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more