mirror of
https://github.com/tokio-rs/axum.git
synced 2026-08-17 00:00:16 +02:00
This way there is now only one way to create a router:
```rust
use axum::{Router, handler::get};
let app = Router::new()
.route("/foo", get(handler))
.route("/foo", get(handler));
```
`nest` was changed in the same way:
```rust
use axum::Router;
let app = Router::new().nest("/foo", service);
```
41 lines
946 B
Rust
41 lines
946 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::{
|
|
/// extract::RawQuery,
|
|
/// handler::get,
|
|
/// Router,
|
|
/// };
|
|
/// use futures::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<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().query().map(|query| query.to_string());
|
|
Ok(Self(query))
|
|
}
|
|
}
|