pub trait QueryStringExtractor<B>: for<'de> Deserialize<'de> + StaticResponseExtender<ResBody = B> + StateDatawhere
    B: HttpBody,{ }
Expand description

Defines a binding for storing the query parameters from the Request URI in State. On failure the StaticResponseExtender implementation extends the Response to indicate why the extraction process failed.

This trait is automatically implemented when the struct implements the Deserialize, StateData and StaticResponseExtender traits. These traits can be derived, or implemented manually for greater control.

The default behaviour given by deriving all three traits will use the automatically derived behaviour from Serde, and result in a 400 Bad Request HTTP response if the query string is not able to be deserialized.

Examples

#[derive(Deserialize, StateData, StaticResponseExtender)]
struct MyQueryParams {
    x: i32,
    y: MyEnum,
}

#[derive(Deserialize, Clone, Copy, Debug)]
#[serde(rename_all = "kebab-case")]
enum MyEnum {
    A,
    B,
    C,
}

fn handler(state: State) -> (State, Response<Body>) {
    let &MyQueryParams { x, y } = MyQueryParams::borrow_from(&state);
    let body = format!("x = {}, y = {:?}", x, y);

    let response = create_response(
        &state,
        StatusCode::OK,
        mime::TEXT_PLAIN,
        body,
    );

    (state, response)
}

fn router() -> Router {
    build_simple_router(|route| {
        route
            .get("/test")
            .with_query_string_extractor::<MyQueryParams>()
            .to(handler);
    })
}

Implementors§

source§

impl<T, B> QueryStringExtractor<B> for Twhere B: HttpBody, for<'de> T: Deserialize<'de> + StaticResponseExtender<ResBody = B> + StateData,