use axum::extract::{Request, State}; use axum::middleware::Next; use axum::response::{IntoResponse, Response}; use crate::error::SessionError; use crate::extract::Session; pub fn require_uid(session: &Session) -> Result { match session.uid() { Some(uid) => Ok(uid), None if session.is_expired() => Err(SessionError::Expired), None => Err(SessionError::Unauthorized), } } pub async fn session_guard( State(_service): State, session: Session, request: Request, next: Next, ) -> Response where S: Send + Sync + 'static, { match require_uid(&session) { Ok(_) => next.run(request).await, Err(error) => error.into_response(), } }