use std::path::{Path, PathBuf};
use std::{fmt, io};
#[derive(Debug)]
pub enum ReportError {
IO {
inner: io::ErrorKind,
file: PathBuf,
message: String,
},
Message(String),
}
impl ReportError {
pub fn from_string(message: &str) -> Self {
ReportError::Message(message.to_string())
}
pub fn from_io_error(error: &io::Error, file: &Path, message: &str) -> Self {
ReportError::IO {
inner: error.kind(),
file: file.to_path_buf(),
message: message.to_string(),
}
}
}
impl fmt::Display for ReportError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
ReportError::IO {
inner,
file,
message,
} => write!(f, "{message} {} ({inner})", file.display()),
ReportError::Message(message) => write!(f, "{message}"),
}
}
}