tower_surf/
extract.rs

1use async_trait::async_trait;
2use axum_core::extract::FromRequestParts;
3use http::{request::Parts, StatusCode};
4
5use crate::{Error, Token};
6
7#[async_trait]
8impl<S> FromRequestParts<S> for Token
9where
10    S: Send + Sync,
11{
12    type Rejection = (StatusCode, String);
13
14    async fn from_request_parts(parts: &mut Parts, _: &S) -> Result<Self, Self::Rejection> {
15        parts
16            .extensions
17            .get::<Token>()
18            .cloned()
19            .ok_or(Error::ExtensionNotFound("Token".into()))
20            .map_err(|err| (StatusCode::INTERNAL_SERVER_ERROR, err.to_string()))
21    }
22}