use snafu::Snafu;
use tibba_error::Error as BaseError;
mod middleware;
mod session;
pub use middleware::*;
pub use session::*;
#[derive(Debug, Snafu)]
pub enum Error {
#[snafu(display("session id is empty"))]
SessionIdEmpty,
#[snafu(display("session id is invalid"))]
SessionIdInvalid,
#[snafu(display("session cache is not set"))]
SessionCacheNotSet,
#[snafu(display("{source}"))]
Key { source: cookie::KeyError },
#[snafu(display("session not found"))]
SessionNotFound,
#[snafu(display("user not login"))]
UserNotLogin,
#[snafu(display("user not admin"))]
UserNotAdmin,
}
impl From<Error> for BaseError {
fn from(val: Error) -> Self {
let err = match val {
e @ (Error::SessionIdEmpty
| Error::SessionIdInvalid
| Error::SessionCacheNotSet
| Error::SessionNotFound) => BaseError::new(e.to_string())
.with_status(500)
.with_exception(true),
Error::Key { source } => BaseError::new(source)
.with_sub_category("cookie")
.with_status(500)
.with_exception(true),
Error::UserNotLogin => BaseError::new("user not login")
.with_sub_category("user")
.with_status(401)
.with_exception(false),
Error::UserNotAdmin => BaseError::new("user not admin")
.with_sub_category("user")
.with_status(403)
.with_exception(false),
};
err.with_category("session")
}
}