fabaccess-bffh/src/error.rs

120 lines
2.8 KiB
Rust
Raw Normal View History

2020-02-14 12:20:17 +01:00
use std::io;
2020-05-04 13:22:14 +02:00
use std::fmt;
2020-12-12 13:58:04 +01:00
use serde_dhall;
2020-05-04 13:22:14 +02:00
use rsasl::SaslError;
2020-02-14 12:20:17 +01:00
2020-09-14 10:37:51 +02:00
// SpawnError is a somewhat ambigous name, `use as` to make it futures::SpawnError instead.
2020-12-07 14:39:35 +01:00
use futures::task as futures_task;
2020-09-14 10:37:51 +02:00
use paho_mqtt::errors as mqtt;
//FIXME use crate::network;
2020-12-07 14:39:35 +01:00
2020-02-14 12:20:17 +01:00
#[derive(Debug)]
pub enum Error {
2020-12-12 13:58:04 +01:00
Dhall(serde_dhall::Error),
2020-05-04 13:22:14 +02:00
SASL(SaslError),
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),
2020-09-10 10:39:46 +02:00
LMDB(lmdb::Error),
2020-12-07 14:39:35 +01:00
FuturesSpawn(futures_task::SpawnError),
MQTT(mqtt::Error),
2020-10-29 13:04:20 +01:00
BadVersion((u32,u32)),
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 {
2020-12-12 13:58:04 +01:00
Error::Dhall(e) => {
write!(f, "Dhall coding error: {}", e)
},
2020-05-04 13:22:14 +02:00
Error::SASL(e) => {
write!(f, "SASL Error: {}", e)
},
Error::IO(e) => {
write!(f, "IO Error: {}", e)
},
Error::Boxed(e) => {
write!(f, "{}", e)
2020-09-10 10:44:16 +02:00
},
2020-05-11 18:21:45 +02:00
Error::Capnp(e) => {
write!(f, "Cap'n Proto Error: {}", e)
2020-09-10 10:44:16 +02:00
},
Error::LMDB(e) => {
write!(f, "LMDB Error: {}", e)
},
2020-09-14 10:37:51 +02:00
Error::FuturesSpawn(e) => {
write!(f, "Future could not be spawned: {}", e)
},
Error::MQTT(e) => {
write!(f, "Paho MQTT encountered an error: {}", e)
},
2020-10-29 13:04:20 +01:00
Error::BadVersion((major,minor)) => {
write!(f, "Peer uses API version {}.{} which is incompatible!", major, minor)
}
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
}
}
}
impl From<SaslError> for Error {
fn from(e: SaslError) -> Error {
Error::SASL(e)
}
}
impl From<io::Error> for Error {
fn from(e: io::Error) -> Error {
Error::IO(e)
}
}
2020-12-12 13:58:04 +01:00
impl From<serde_dhall::Error> for Error {
fn from(e: serde_dhall::Error) -> Error {
Error::Dhall(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)
}
}
2020-09-10 10:39:46 +02:00
impl From<lmdb::Error> for Error {
fn from(e: lmdb::Error) -> Error {
Error::LMDB(e)
}
}
impl From<futures_task::SpawnError> for Error {
fn from(e: futures_task::SpawnError) -> Error {
2020-09-14 10:37:51 +02:00
Error::FuturesSpawn(e)
}
}
impl From<mqtt::Error> for Error {
fn from(e: mqtt::Error) -> Error {
Error::MQTT(e)
}
}
/*impl From<network::Error> for Error {
2020-12-07 14:39:35 +01:00
fn from(e: network::Error) -> Error {
Error::EventNetwork(e)
}
}*/
2020-12-07 14:39:35 +01:00
2020-09-14 10:37:51 +02:00
pub(crate) type Result<T> = std::result::Result<T, Error>;