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}