79 lines
2.4 KiB
Rust
79 lines
2.4 KiB
Rust
/*##############################################################################
|
|
## Author: Shaun Reed ##
|
|
## Legal: All Content (c) 2021 Shaun Reed, all rights reserved ##
|
|
## About: Error module for dotfiles manager kot ##
|
|
## This module supports converting errors to custom types using ? operator ##
|
|
## ##
|
|
## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ##
|
|
##############################################################################*/
|
|
|
|
use std::fmt::{Debug, Display, Formatter};
|
|
|
|
// Error types for kot application
|
|
#[derive(Debug)]
|
|
pub enum ErrorKind {
|
|
ConfigError(String),
|
|
GitError(String),
|
|
IOError(String),
|
|
FileError(String),
|
|
DirError(String),
|
|
Other(String),
|
|
}
|
|
|
|
// =============================================================================
|
|
// IMPLEMENTATION
|
|
// =============================================================================
|
|
|
|
#[derive(Debug)]
|
|
pub struct Error {
|
|
pub kind: ErrorKind,
|
|
message: String,
|
|
}
|
|
|
|
// Implement Display trait for printing found errors
|
|
impl std::fmt::Display for ErrorKind {
|
|
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
|
write!(f, "{:?}", self)
|
|
}
|
|
}
|
|
|
|
impl Display for Error {
|
|
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
|
write!(f, "Kot {:?}", self)
|
|
}
|
|
}
|
|
|
|
impl std::error::Error for Error { }
|
|
|
|
impl Error {
|
|
pub fn new(kind: ErrorKind, message: String) -> Error {
|
|
Error {
|
|
kind: kind,
|
|
message: message.to_string(),
|
|
}
|
|
}
|
|
}
|
|
|
|
// Implement From<T> for each error type T that we want to handle
|
|
// These implementations handle converting from T to kot::kerror::Error using ?
|
|
|
|
// Converting from std::io::Error to kot::kerror::Error::GitError
|
|
impl std::convert::From<std::io::Error> for Error {
|
|
fn from(error: std::io::Error) -> Self {
|
|
return Error::new(ErrorKind::IOError(error.to_string()),
|
|
"(std::io error)".to_owned());
|
|
}
|
|
}
|
|
|
|
// Converting from fs_extra::error::Error to kot::kerror::Error::GitError
|
|
impl std::convert::From<fs_extra::error::Error> for Error {
|
|
fn from(error: fs_extra::error::Error) -> Self {
|
|
return Error::new(ErrorKind::FileError(error.to_string()),
|
|
"(fs_extra error)".to_owned());
|
|
}
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
|