2687ace
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<DbErr> for SessionError {
fn from(err: DbErr) -> Self {
Self::Database(err)
}
}
impl IntoResponse for SessionError {
fn into_response(self) -> Response {
match self {
Self::Unauthorized => {
AppResponseData::<NoData>::err(401, "unauthorized").into_response()
}
Self::Database(err) => {
tracing::error!(error = %err, "session store failure");
AppResponseData::<NoData>::err(500, "internal error").into_response()
}
}
}
}