use axum::extract::FromRequestParts;
use axum::http::StatusCode;
use crate::types::{PpnumId, SessionId, UserId};
#[derive(Debug, Clone)]
#[non_exhaustive]
pub struct AuthPpnum {
pub session_id: SessionId,
pub user_id: UserId,
pub ppnum_id: PpnumId,
}
impl AuthPpnum {
#[must_use]
pub fn new(session_id: SessionId, user_id: UserId, ppnum_id: PpnumId) -> Self {
Self {
session_id,
user_id,
ppnum_id,
}
}
}
impl<S: Send + Sync> FromRequestParts<S> for AuthPpnum {
type Rejection = StatusCode;
async fn from_request_parts(
parts: &mut axum::http::request::Parts,
_state: &S,
) -> Result<Self, Self::Rejection> {
parts
.extensions
.get::<AuthPpnum>()
.cloned()
.ok_or(StatusCode::UNAUTHORIZED)
}
}