axum_core/ext_traits/
mod.rs
1pub(crate) mod request;
2pub(crate) mod request_parts;
3
4#[cfg(test)]
5mod tests {
6 use std::convert::Infallible;
7
8 use crate::extract::{FromRef, FromRequestParts};
9 use async_trait::async_trait;
10 use http::request::Parts;
11
12 #[derive(Debug, Default, Clone, Copy)]
13 pub(crate) struct State<S>(pub(crate) S);
14
15 #[async_trait]
16 impl<OuterState, InnerState> FromRequestParts<OuterState> for State<InnerState>
17 where
18 InnerState: FromRef<OuterState>,
19 OuterState: Send + Sync,
20 {
21 type Rejection = Infallible;
22
23 async fn from_request_parts(
24 _parts: &mut Parts,
25 state: &OuterState,
26 ) -> Result<Self, Self::Rejection> {
27 let inner_state = InnerState::from_ref(state);
28 Ok(Self(inner_state))
29 }
30 }
31
32 #[allow(dead_code)]
34 pub(crate) struct RequiresState(pub(crate) String);
35
36 #[async_trait]
37 impl<S> FromRequestParts<S> for RequiresState
38 where
39 S: Send + Sync,
40 String: FromRef<S>,
41 {
42 type Rejection = Infallible;
43
44 async fn from_request_parts(
45 _parts: &mut Parts,
46 state: &S,
47 ) -> Result<Self, Self::Rejection> {
48 Ok(Self(String::from_ref(state)))
49 }
50 }
51}