use super::keys;
use crate::types::DataTypeError;
use crate::types::UnitError;
use log::{error, warn};
use std::error::Error;
use zbus::DBusError;
#[derive(Debug, DBusError)]
#[dbus_error(prefix = "se.modio.logger.fsipc")]
pub enum LogErr {
#[dbus_error(zbus_error)]
ZBus(zbus::Error),
KeyError(String),
NotFound(String),
Datastore(String),
Buffer(String),
IOError(String),
UnitError(String),
DataTypeError(String),
}
impl From<std::io::Error> for LogErr {
fn from(e: std::io::Error) -> Self {
let msg = e.to_string();
if let Some(source) = e.source() {
error!("IO Error. outer: '{}', source: '{}'", msg, source);
} else {
warn!("IO Error. outer: '{}'", msg);
}
Self::IOError(msg)
}
}
impl From<modio_logger_db::Error> for LogErr {
fn from(e: modio_logger_db::Error) -> Self {
let msg = e.to_string();
if let Some(source) = e.source() {
error!("Loggerdb error. outer: '{}', source: '{}'", msg, source);
} else {
warn!("Loggerdb error. outer: '{}'", msg);
}
Self::Datastore(msg)
}
}
impl From<keys::KeyError> for LogErr {
fn from(e: keys::KeyError) -> Self {
let msg = e.to_string();
Self::KeyError(msg)
}
}
impl From<UnitError> for LogErr {
fn from(e: UnitError) -> Self {
let msg = e.to_string();
Self::UnitError(msg)
}
}
impl From<DataTypeError> for LogErr {
fn from(e: DataTypeError) -> Self {
let msg = e.to_string();
Self::DataTypeError(msg)
}
}