lj_rust/src/errors.rs

51 lines
1.2 KiB
Rust

use config::ConfigError;
use redis::RedisError;
use std::error::Error;
use std::{fmt, io};
pub type LJResult<T> = Result<T, Box<dyn std::error::Error>>;
#[derive(Debug)]
pub enum LJError {
Config(ConfigError),
RedisConnect(RedisError),
HeliosDeviceMissing,
BadEDH,
EtherdreamConnectError(io::Error),
}
impl fmt::Display for LJError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
use LJError::*;
match self {
Config(err) => {
write!(f, "unable to load config file: {err}")
}
RedisConnect(err) => {
write!(f, "unable to connect to redis server: {err}")
}
HeliosDeviceMissing => {
write!(f, "helios device not found")
}
BadEDH => {
write!(f, "EDH matrix is not a 3x3 matrix")
}
EtherdreamConnectError(err) => {
write!(f, "Failed to retrieve Etherdream device: {err}")
}
}
}
}
impl Error for LJError {
fn source(&self) -> Option<&(dyn Error + 'static)> {
use LJError::*;
match self {
RedisConnect(err) => Some(err),
_ => None,
}
}
}