72 lines
2.3 KiB
Rust
72 lines
2.3 KiB
Rust
|
pub mod user;
|
||
|
mod manager;
|
||
|
pub use manager::UserManager;
|
||
|
pub use user::User;
|
||
|
|
||
|
#[derive(Debug)]
|
||
|
pub enum UserManagerError {
|
||
|
UsernameNotUnique,
|
||
|
PasswordNotSet,
|
||
|
DatabaseError(sled::Error),
|
||
|
DatabaseTransactionError(sled::transaction::TransactionError),
|
||
|
DeserializeError(bincode::Error),
|
||
|
BcryptError(bcrypt::BcryptError),
|
||
|
}
|
||
|
|
||
|
impl From<sled::Error> for UserManagerError {
|
||
|
fn from(error: sled::Error) -> Self {
|
||
|
Self::DatabaseError(error)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl From<sled::transaction::TransactionError> for UserManagerError {
|
||
|
fn from(error: sled::transaction::TransactionError) -> Self {
|
||
|
Self::DatabaseTransactionError(error)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl From<bincode::Error> for UserManagerError {
|
||
|
fn from(error: bincode::Error) -> Self {
|
||
|
Self::DeserializeError(error)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl From<bcrypt::BcryptError> for UserManagerError {
|
||
|
fn from(error: bcrypt::BcryptError) -> Self {
|
||
|
Self::BcryptError(error)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl std::error::Error for UserManagerError {
|
||
|
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
|
||
|
match self {
|
||
|
Self::DatabaseError(e) => Some(e),
|
||
|
Self::DatabaseTransactionError(e) => Some(e),
|
||
|
Self::DeserializeError(e) => Some(e),
|
||
|
Self::BcryptError(e) => Some(e),
|
||
|
_ => None
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl std::fmt::Display for UserManagerError {
|
||
|
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::result::Result<(), std::fmt::Error> {
|
||
|
match self {
|
||
|
Self::UsernameNotUnique =>
|
||
|
write!(f, "Attempted to create a user using a username that's already been taken"),
|
||
|
Self::PasswordNotSet =>
|
||
|
write!(f, "Attempted to check the password of a user who has not set one yet"),
|
||
|
Self::DatabaseError(e) =>
|
||
|
write!(f, "Error accessing the user database: {}", e),
|
||
|
Self::DatabaseTransactionError(e) =>
|
||
|
write!(f, "Error accessing the user database: {}", e),
|
||
|
Self::DeserializeError(e) =>
|
||
|
write!(f, "Recieved messy data from database, possible corruption: {}", e),
|
||
|
Self::BcryptError(e) =>
|
||
|
write!(f, "Bcrypt Error, likely malformed password hash, possible database corruption: {}", e),
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
pub type Result<T> = std::result::Result<T, UserManagerError>;
|