use revenant_sign_tls::TlsError;
#[derive(Debug, thiserror::Error)]
pub enum RevenantError {
#[error("{0}")]
Auth(String),
#[error("{0}")]
Server(String),
#[error("{message}")]
Tls { message: String, retryable: bool },
#[error("{0}")]
Pdf(String),
#[error("{0}")]
Config(String),
#[error("{0}")]
Certificate(String),
#[error("{0}")]
SigningResponse(String),
#[error("{0}")]
Other(String),
}
impl RevenantError {
#[must_use]
pub fn tls(message: impl Into<String>) -> Self {
RevenantError::Tls {
message: message.into(),
retryable: false,
}
}
#[must_use]
pub fn tls_retryable(message: impl Into<String>) -> Self {
RevenantError::Tls {
message: message.into(),
retryable: true,
}
}
#[must_use]
pub fn is_retryable(&self) -> bool {
matches!(
self,
RevenantError::Tls {
retryable: true,
..
}
)
}
#[must_use]
pub fn is_tls(&self) -> bool {
matches!(self, RevenantError::Tls { .. })
}
}
impl From<TlsError> for RevenantError {
fn from(err: TlsError) -> Self {
RevenantError::Tls {
retryable: err.is_retryable(),
message: err.to_string(),
}
}
}
pub type Result<T> = std::result::Result<T, RevenantError>;