#[derive(Debug)]
pub enum PublishError {
DescribeInvalid(String),
Build(String),
VersionExists(String),
AuthRequired(String),
RegistryNotWritable(String),
NotImplemented(String),
Io(String),
Other(anyhow::Error),
}
impl std::fmt::Display for PublishError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
PublishError::DescribeInvalid(m)
| PublishError::Build(m)
| PublishError::VersionExists(m)
| PublishError::AuthRequired(m)
| PublishError::RegistryNotWritable(m)
| PublishError::NotImplemented(m)
| PublishError::Io(m) => write!(f, "{m}"),
PublishError::Other(e) => write!(f, "{e}"),
}
}
}
impl std::error::Error for PublishError {}
impl PublishError {
#[must_use]
pub fn exit_code(&self) -> i32 {
match self {
PublishError::DescribeInvalid(_) => 2,
PublishError::VersionExists(_) => 10,
PublishError::AuthRequired(_) => 20,
PublishError::RegistryNotWritable(_) => 30,
PublishError::NotImplemented(_) => 50,
PublishError::Build(_) => 70,
PublishError::Io(_) => 74,
PublishError::Other(_) => 1,
}
}
}
pub(super) fn io_err<E: std::fmt::Display>(e: E) -> PublishError {
PublishError::Io(e.to_string())
}