use thiserror::Error;
#[derive(Debug, Error)]
pub enum CapabilityError {
#[error("capability token expired: {token_id}")]
TokenExpired {
token_id: String,
},
#[error("capability token revoked: {token_id}")]
TokenRevoked {
token_id: String,
},
#[error("capability token not found: {token_id}")]
TokenNotFound {
token_id: String,
},
#[error("single-use token already used: {token_id}")]
TokenAlreadyUsed {
token_id: String,
},
#[error("insufficient capability: required {required} for {resource}")]
InsufficientPermission {
required: String,
resource: String,
},
#[error("invalid token signature")]
InvalidSignature,
#[error("invalid resource pattern: {pattern} - {reason}")]
InvalidPattern {
pattern: String,
reason: String,
},
#[error("storage error: {0}")]
StorageError(String),
#[error("crypto error: {0}")]
CryptoError(#[from] astrid_crypto::CryptoError),
#[error("serialization error: {0}")]
SerializationError(String),
}
pub type CapabilityResult<T> = Result<T, CapabilityError>;