use glob::PatternError;
use semver::Error as SemverError;
#[derive(Debug)]
pub struct Error {
context: String,
source: Option<Box<dyn std::error::Error>>,
}
impl Error {
pub fn new(context: &str) -> Self {
Self {
context: context.into(),
source: None,
}
}
pub fn new_with_source(context: &str, err: Box<dyn std::error::Error>) -> Self {
Self {
context: context.into(),
source: Some(err),
}
}
}
impl std::error::Error for Error {}
impl std::fmt::Display for Error {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
if let Some(ref err) = self.source {
write!(f, "{}: {}", self.context, err)
} else {
f.write_str(&self.context)
}
}
}
impl From<PatternError> for Error {
fn from(err: PatternError) -> Self {
Self::new_with_source("invalid file pattern", err.into())
}
}
impl From<SemverError> for Error {
fn from(err: SemverError) -> Self {
Self::new_with_source("invalid version", err.into())
}
}