fabaccess-bffh/bffhd/error.rs

75 lines
1.6 KiB
Rust
Raw Permalink Normal View History

2022-03-16 18:10:59 +01:00
use crate::db;
2022-05-05 15:50:44 +02:00
use rsasl::error::SessionError;
use std::fmt;
use std::io;
2022-03-16 18:10:59 +01:00
type DBError = db::Error;
2020-02-14 12:20:17 +01:00
#[derive(Debug)]
2021-10-28 01:10:35 +02:00
/// Shared error type
2020-02-14 12:20:17 +01:00
pub enum Error {
2022-03-08 16:41:38 +01:00
SASL(SessionError),
IO(io::Error),
2020-02-18 16:55:19 +01:00
Boxed(Box<dyn std::error::Error>),
2020-05-11 18:21:45 +02:00
Capnp(capnp::Error),
2021-10-20 18:37:50 +02:00
DB(DBError),
2020-11-30 14:08:03 +01:00
Denied,
}
2020-05-04 13:22:14 +02:00
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Error::SASL(e) => {
write!(f, "SASL Error: {}", e)
2022-05-05 15:50:44 +02:00
}
2020-05-04 13:22:14 +02:00
Error::IO(e) => {
write!(f, "IO Error: {}", e)
2022-05-05 15:50:44 +02:00
}
2020-05-04 13:22:14 +02:00
Error::Boxed(e) => {
write!(f, "{}", e)
2022-05-05 15:50:44 +02:00
}
2020-05-11 18:21:45 +02:00
Error::Capnp(e) => {
write!(f, "Cap'n Proto Error: {}", e)
2022-05-05 15:50:44 +02:00
}
2021-10-20 18:37:50 +02:00
Error::DB(e) => {
write!(f, "DB Error: {:?}", e)
2022-05-05 15:50:44 +02:00
}
2020-11-30 14:08:03 +01:00
Error::Denied => {
write!(f, "You do not have the permission required to do that.")
}
2020-05-04 13:22:14 +02:00
}
}
}
2022-03-08 16:41:38 +01:00
impl From<SessionError> for Error {
fn from(e: SessionError) -> Error {
Error::SASL(e)
}
}
impl From<io::Error> for Error {
fn from(e: io::Error) -> Error {
Error::IO(e)
}
}
2020-02-18 16:55:19 +01:00
impl From<Box<dyn std::error::Error>> for Error {
fn from(e: Box<dyn std::error::Error>) -> Error {
Error::Boxed(e)
}
}
2020-05-11 18:21:45 +02:00
impl From<capnp::Error> for Error {
fn from(e: capnp::Error) -> Error {
Error::Capnp(e)
}
}
2021-10-20 18:37:50 +02:00
impl From<DBError> for Error {
fn from(e: DBError) -> Error {
Error::DB(e)
2020-09-10 10:39:46 +02:00
}
}
2022-05-05 15:50:44 +02:00
pub type Result<T> = std::result::Result<T, Error>;