telegram_authorizer/
extract.rs1use 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}