axum/extract/
raw_query.rs

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