mirror of
https://github.com/tokio-rs/axum.git
synced 2026-08-14 00:00:15 +02:00
This breaks up `extract.rs` into several smaller submodules. The public API remains the same. This is done in prep for adding more tests to extractors which would get messy if they were all in the same file.
40 lines
948 B
Rust
40 lines
948 B
Rust
use super::{FromRequest, RequestParts};
|
|
use async_trait::async_trait;
|
|
use std::convert::Infallible;
|
|
|
|
/// Extractor that extracts the raw query string, without parsing it.
|
|
///
|
|
/// # Example
|
|
///
|
|
/// ```rust,no_run
|
|
/// use axum::prelude::*;
|
|
/// use futures::StreamExt;
|
|
///
|
|
/// async fn handler(extract::RawQuery(query): extract::RawQuery) {
|
|
/// // ...
|
|
/// }
|
|
///
|
|
/// let app = route("/users", get(handler));
|
|
/// # async {
|
|
/// # hyper::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
|
/// # };
|
|
/// ```
|
|
#[derive(Debug)]
|
|
pub struct RawQuery(pub Option<String>);
|
|
|
|
#[async_trait]
|
|
impl<B> FromRequest<B> for RawQuery
|
|
where
|
|
B: Send,
|
|
{
|
|
type Rejection = Infallible;
|
|
|
|
async fn from_request(req: &mut RequestParts<B>) -> Result<Self, Self::Rejection> {
|
|
let query = req
|
|
.uri()
|
|
.and_then(|uri| uri.query())
|
|
.map(|query| query.to_string());
|
|
Ok(Self(query))
|
|
}
|
|
}
|