| use super::FromRequestParts; |
| use async_trait::async_trait; |
| use http::request::Parts; |
| use std::convert::Infallible; |
| |
| /// Extractor that extracts the raw query string, without parsing it. |
| /// |
| /// # Example |
| /// |
| /// ```rust,no_run |
| /// use axum::{ |
| /// extract::RawQuery, |
| /// routing::get, |
| /// Router, |
| /// }; |
| /// use futures_util::StreamExt; |
| /// |
| /// async fn handler(RawQuery(query): RawQuery) { |
| /// // ... |
| /// } |
| /// |
| /// let app = Router::new().route("/users", get(handler)); |
| /// # async { |
| /// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap(); |
| /// # }; |
| /// ``` |
| #[derive(Debug)] |
| pub struct RawQuery(pub Option<String>); |
| |
| #[async_trait] |
| impl<S> FromRequestParts<S> for RawQuery |
| where |
| S: Send + Sync, |
| { |
| type Rejection = Infallible; |
| |
| async fn from_request_parts(parts: &mut Parts, _state: &S) -> Result<Self, Self::Rejection> { |
| let query = parts.uri.query().map(|query| query.to_owned()); |
| Ok(Self(query)) |
| } |
| } |