1 use super::FromRequestParts; 2 use async_trait::async_trait; 3 use http::request::Parts; 4 use 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 /// # async { 24 /// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap(); 25 /// # }; 26 /// ``` 27 #[derive(Debug)] 28 pub struct RawQuery(pub Option<String>); 29 30 #[async_trait] 31 impl<S> FromRequestParts<S> for RawQuery 32 where 33 S: Send + Sync, 34 { 35 type Rejection = Infallible; 36 from_request_parts(parts: &mut Parts, _state: &S) -> Result<Self, Self::Rejection>37 async fn from_request_parts(parts: &mut Parts, _state: &S) -> Result<Self, Self::Rejection> { 38 let query = parts.uri.query().map(|query| query.to_owned()); 39 Ok(Self(query)) 40 } 41 } 42