State

Trait State 

Source
pub trait State:
    'static
    + Clone
    + Send
    + Sync
    + Sized { }
Expand description

The State trait, should be replace with trait alias. The App::state will be cloned when a request inbounds.

State is designed to share data or handler between middlewares.

§Example

use roa_core::{App, Context, Next, Result};
use roa_core::http::StatusCode;

#[derive(Clone)]
struct State {
    id: u64,
}

let app = App::state(State { id: 0 }).gate(gate).end(end);
async fn gate(ctx: &mut Context<State>, next: Next<'_>) -> Result {
    ctx.id = 1;
    next.await
}

async fn end(ctx: &mut Context<State>) -> Result {
    let id = ctx.id;
    assert_eq!(1, id);
    Ok(())
}

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<T: 'static + Clone + Send + Sync + Sized> State for T