use std::fmt::{Display, Formatter};
use thiserror::Error;
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
#[non_exhaustive]
pub enum RepositoryLoadKind {
Environment,
Path,
}
impl Display for RepositoryLoadKind {
#[inline]
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match *self {
Self::Environment => write!(f, "environment"),
Self::Path => write!(f, "path"),
}
}
}
#[derive(Error, Debug, PartialEq)]
#[non_exhaustive]
pub enum GitError {
#[error("Could not open repository from {kind}")]
RepositoryLoad {
kind: RepositoryLoadKind,
#[source]
cause: git2::Error,
},
#[error("Could not load configuration")]
ConfigLoad {
#[source]
cause: git2::Error,
},
#[error("Could not load configuration")]
ReferenceNotFound {
#[source]
cause: git2::Error,
},
#[error("Could not load commit")]
CommitLoad {
#[source]
cause: git2::Error,
},
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn repository_load_kind_display_environment() {
assert_eq!(format!("{}", RepositoryLoadKind::Environment), "environment");
}
#[test]
fn repository_load_kind_display_path() {
assert_eq!(format!("{}", RepositoryLoadKind::Path), "path");
}
}