Function warp::filters::query::query

source ·
pub fn query<T: DeserializeOwned + Send + 'static>() -> impl Filter<Extract = (T,), Error = Rejection> + Copy
Expand description

Creates a Filter that decodes query parameters to the type T.

If cannot decode into a T, the request is rejected with a 400 Bad Request.

§Example

use std::collections::HashMap;
use warp::{
    http::Response,
    Filter,
};

let route = warp::any()
    .and(warp::query::<HashMap<String, String>>())
    .map(|map: HashMap<String, String>| {
        let mut response: Vec<String> = Vec::new();
        for (key, value) in map.into_iter() {
            response.push(format!("{}={}", key, value))
        }
        Response::builder().body(response.join(";"))
    });

You can define your custom query object and deserialize with Serde. Ensure to include the crate in your dependencies before usage.

use serde_derive::{Deserialize, Serialize};
use std::collections::HashMap;
use warp::{
    http::Response,
    Filter,
};

#[derive(Serialize, Deserialize)]
struct FooQuery {
    foo: Option<String>,
    bar: u8,
}

let route = warp::any()
    .and(warp::query::<FooQuery>())
    .map(|q: FooQuery| {
        if let Some(foo) = q.foo {
            Response::builder().body(format!("foo={}", foo))
        } else {
            Response::builder().body(format!("bar={}", q.bar))
        }
    });

For more examples, please take a look at examples/query_string.rs.