use std::process::ExitCode;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CommandExitCode {
Success = 0,
GeneralError = 1,
InvalidArguments = 2,
ConfigError = 3,
GitError = 10,
RegistryError = 11,
VersionError = 12,
CheckFailed = 13,
SecurityError = 14,
NetworkError = 15,
PartialSuccess = 20,
RollbackFailed = 21,
CheckpointCreated = 30,
NoChanges = 31,
DriftDetected = 32,
}
impl From<CommandExitCode> for ExitCode {
fn from(code: CommandExitCode) -> Self {
Self::from(code as u8)
}
}
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("CLI error: {0}")]
Cli(String),
#[error("IO error: {0}")]
Io(String),
#[error("Config error: {0}")]
Config(String),
#[error("Version error: {0}")]
Version(String),
#[error("Invalid arguments: {0}")]
InvalidArguments(String),
#[error("Check failed: {0}")]
CheckFailed(String),
#[error("Git error: {0}")]
Git(String),
#[error("Registry error: {0}")]
Registry(String),
#[error("Owners error: {0}")]
Owners(String),
#[error("Core error: {0}")]
Core(#[from] governor_core::Error),
#[error("IO error: {0}")]
StdIo(#[from] std::io::Error),
}
impl From<String> for Error {
fn from(s: String) -> Self {
Self::Cli(s)
}
}