1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// Author: D.S. Ljungmark <spider@skuggor.se>, Modio AB
// SPDX-License-Identifier: AGPL-3.0-or-later
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)
    }
}