Skip to main content

State

Struct State 

Source
pub struct State<T>(/* private fields */);
Expand description

Application state.

Application state is an arbitrary data attached to the app. Application state is available to all routes and could be added during application configuration process with App::state() method.

Application state could be accessed by using State<T> extractor where T is state type.

Note: http server accepts an application factory rather than an application instance. Http server constructs an application instance for each thread, thus application data must be constructed multiple times. If you want to share state between different threads, a shareable object should be used, e.g. Send + Sync. Application state does not need to be Send or Sync.

If state is not set for a handler, using State<T> extractor would cause Internal Server Error response.

use std::sync::{Arc, Mutex};
use ntex::web::{self, App, HttpResponse};

struct MyState {
    counter: usize,
}

/// Use `State<T>` extractor to access data in handler.
async fn index(st: web::types::State<Arc<Mutex<MyState>>>) -> HttpResponse {
    let mut data = st.lock().unwrap();
    data.counter += 1;
    HttpResponse::Ok().into()
}

fn main() {
    let st = Arc::new(Mutex::new(MyState{ counter: 0 }));

    let app = App::new()
        // Store `MyState` in application storage.
        .state(st.clone())
        .service(
            web::resource("/index.html").route(
                web::get().to(index)));
}

Implementations§

Source§

impl<T: 'static> State<T>

Source

pub fn get_ref(&self) -> &T

Get reference to inner app data.

§Panics

Panics is T is not stored in app state

Trait Implementations§

Source§

impl<T> Clone for State<T>

Source§

fn clone(&self) -> State<T>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug> Debug for State<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: 'static> Deref for State<T>

Source§

type Target = T

The resulting type after dereferencing.
Source§

fn deref(&self) -> &T

Dereferences the value.
Source§

impl<T: 'static, E: ErrorRenderer> FromRequest<E> for State<T>

Source§

type Error = StateExtractorError

The associated error which can be returned.
Source§

async fn from_request( req: &HttpRequest, _: &mut Payload, ) -> Result<Self, Self::Error>

Convert request to a Self

Auto Trait Implementations§

§

impl<T> Freeze for State<T>

§

impl<T> !RefUnwindSafe for State<T>

§

impl<T> !Send for State<T>

§

impl<T> !Sync for State<T>

§

impl<T> Unpin for State<T>
where T: Unpin,

§

impl<T> !UnwindSafe for State<T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Formattable for T
where T: Deref, <T as Deref>::Target: Formattable,

Source§

impl<T> Parsable for T
where T: Deref, <T as Deref>::Target: Parsable,