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}