telegram_authorizer/
extract.rs

1use axum::{extract::FromRequestParts, http::request::Parts};
2
3use crate::{authorizer::User, error::AuthError};
4
5#[derive(Debug, Clone)]
6pub struct TelegramUser {
7    pub id: u64,
8    pub first_name: String,
9    pub last_name: Option<String>,
10    pub username: Option<String>,
11}
12
13impl<S> FromRequestParts<S> for TelegramUser
14where
15    S: Send + Sync,
16{
17    type Rejection = AuthError;
18
19    async fn from_request_parts(parts: &mut Parts, _: &S) -> Result<Self, Self::Rejection> {
20        Ok(parts
21            .extensions
22            .get::<User>()
23            .ok_or(AuthError::MissingUser)?
24            .clone()
25            .into())
26    }
27}
28
29impl From<User> for TelegramUser {
30    fn from(user: User) -> Self {
31        TelegramUser {
32            id: user.id,
33            first_name: user.first_name,
34            last_name: user.last_name,
35            username: user.username,
36        }
37    }
38}
39#[cfg(feature = "aide")]
40mod aide {
41    use aide::OperationInput;
42    impl OperationInput for super::TelegramUser {}
43}