#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("transport error: {0}")]
Transport(#[from] tonic::transport::Error),
#[error("config error: {0}")]
Config(String),
#[error(transparent)]
Other(#[from] Box<dyn std::error::Error + Send + Sync>),
#[error("capability call rejected: {0}")]
CapabilityPermanent(String),
#[error("capability call failed transiently: {0}")]
CapabilityTransient(String),
#[error("not implemented: {0}")]
NotImplemented(&'static str),
}
impl Error {
pub fn is_transient(&self) -> bool {
matches!(self, Error::CapabilityTransient(_))
}
}
impl From<crate::auth::AuthError> for Error {
fn from(e: crate::auth::AuthError) -> Self {
Error::Config(e.to_string())
}
}
pub type Result<T> = std::result::Result<T, Error>;