From 0515548682a95db643a008146105d8ecdb446e58 Mon Sep 17 00:00:00 2001 From: FxQnLr Date: Mon, 26 Dec 2022 21:57:03 +0100 Subject: changed config to toml, autocreate config; better error handling --- src/error.rs | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) (limited to 'src/error.rs') diff --git a/src/error.rs b/src/error.rs index c82688c..1ac2a48 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,16 +1,20 @@ use core::fmt; +use serde::Deserialize; pub type MLE = Result; -#[derive(Debug)] +#[derive(Debug, Deserialize)] pub struct MLError { etype: ErrorType, message: String, } -#[derive(Debug)] +#[derive(Debug, Deserialize)] pub enum ErrorType { - ArgumentError + ArgumentError, + ConfigError, + LibToml, + IoError, } impl std::error::Error for MLError { @@ -22,11 +26,32 @@ impl std::error::Error for MLError { impl fmt::Display for MLError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match self.etype { - ErrorType::ArgumentError => write!(f, "ARGS") + ErrorType::ArgumentError => write!(f, "ARGS"), + ErrorType::ConfigError => write!(f, "CONFIG"), + ErrorType::LibToml => write!(f, "TOML"), + ErrorType::IoError => write!(f, "IO") } } } +impl From for MLError { + fn from(error: toml::de::Error) -> Self { + Self { etype: ErrorType::LibToml, message: error.to_string() } + } +} + +impl From for MLError { + fn from(error: toml::ser::Error) -> Self { + Self { etype: ErrorType::LibToml, message: error.to_string() } + } +} + +impl From for MLError { + fn from(error: std::io::Error) -> Self { + Self { etype: ErrorType::IoError, message: error.to_string() } + } +} + impl MLError { pub fn new(etype: ErrorType, message: &str) -> Self { Self { etype, message: String::from(message) } -- cgit v1.2.3