axum/extract/
raw_query.rs

1use super::FromRequestParts;
2use http::request::Parts;
3use std::convert::Infallible;
4
5/// Extractor that extracts the raw query string, without parsing it.
6///
7/// # Example
8///
9/// ```rust,no_run
10/// use axum::{
11///     extract::RawQuery,
12///     routing::get,
13///     Router,
14/// };
15/// use futures_util::StreamExt;
16///
17/// async fn handler(RawQuery(query): RawQuery) {
18///     // ...
19/// }
20///
21/// let app = Router::new().route("/users", get(handler));
22/// # let _: Router = app;
23/// ```
24#[derive(Debug)]
25pub struct RawQuery(pub Option<String>);
26
27impl<S> FromRequestParts<S> for RawQuery
28where
29    S: Send + Sync,
30{
31    type Rejection = Infallible;
32
33    async fn from_request_parts(parts: &mut Parts, _state: &S) -> Result<Self, Self::Rejection> {
34        let query = parts.uri.query().map(|query| query.to_owned());
35        Ok(Self(query))
36    }
37}