use git2::{ErrorClass, ErrorCode};
use semver::{Version, VersionReq};
#[derive(Debug)]
pub enum Error {
ConfigurationNotFound,
ConfigurationParseError(toml::de::Error),
ConfigurationEncodingError(std::str::Utf8Error),
InvalidYactVersion(VersionReq, Version),
InvalidGlob(String),
RepositoryNotFound,
RepositoryIsBare,
GitError(git2::Error),
TransformerError(String),
IoError(std::io::Error),
EmptyIndex,
}
impl From<toml::de::Error> for Error {
fn from(err: toml::de::Error) -> Self {
Self::ConfigurationParseError(err)
}
}
impl From<git2::Error> for Error {
fn from(err: git2::Error) -> Self {
if matches!(err.class(), ErrorClass::Repository)
&& matches!(err.code(), ErrorCode::NotFound)
{
Self::RepositoryNotFound
} else {
Self::GitError(err)
}
}
}
impl From<std::io::Error> for Error {
fn from(value: std::io::Error) -> Self {
Self::IoError(value)
}
}
impl From<String> for Error {
fn from(err: String) -> Self {
Self::TransformerError(err)
}
}
impl From<std::str::Utf8Error> for Error {
fn from(err: std::str::Utf8Error) -> Self {
Self::ConfigurationEncodingError(err)
}
}