use axum::response::{IntoResponse, Response}; use export::rest::{AppResponseData, NoData}; use sea_orm::DbErr; #[derive(Debug)] pub enum SessionError { Unauthorized, Database(DbErr), } impl std::fmt::Display for SessionError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Self::Unauthorized => write!(f, "unauthorized"), Self::Database(err) => write!(f, "database error: {err}"), } } } impl std::error::Error for SessionError { fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { match self { Self::Database(err) => Some(err), _ => None, } } } impl From for SessionError { fn from(err: DbErr) -> Self { Self::Database(err) } } impl IntoResponse for SessionError { fn into_response(self) -> Response { match self { Self::Unauthorized => { AppResponseData::::err(401, "unauthorized").into_response() } Self::Database(err) => { tracing::error!(error = %err, "session store failure"); AppResponseData::::err(500, "internal error").into_response() } } } }