use thiserror::Error;
pub type Result<T> = std::result::Result<T, IdprovaError>;
#[derive(Debug, Error)]
pub enum IdprovaError {
#[error("key generation failed: {0}")]
KeyGeneration(String),
#[error("signing failed: {0}")]
Signing(String),
#[error("signature verification failed: {0}")]
VerificationFailed(String),
#[error("invalid key material: {0}")]
InvalidKey(String),
#[error("invalid AID identifier: {0}")]
InvalidAid(String),
#[error("AID document validation failed: {0}")]
AidValidation(String),
#[error("AID not found: {0}")]
AidNotFound(String),
#[error("invalid DAT: {0}")]
InvalidDat(String),
#[error("DAT expired")]
DatExpired,
#[error("DAT not yet valid")]
DatNotYetValid,
#[error("DAT revoked: {0}")]
DatRevoked(String),
#[error("scope not permitted: {0}")]
ScopeNotPermitted(String),
#[error("constraint violated: {0}")]
ConstraintViolated(String),
#[error("delegation chain invalid: {0}")]
InvalidDelegationChain(String),
#[error("receipt chain integrity violation at sequence {0}")]
ReceiptChainBroken(u64),
#[error("invalid receipt: {0}")]
InvalidReceipt(String),
#[error("trust verification failed for level {0}: {1}")]
TrustVerification(String, String),
#[error("serialization error: {0}")]
Serialization(#[from] serde_json::Error),
#[error("base64 decode error: {0}")]
Base64(#[from] base64::DecodeError),
#[error("{0}")]
Other(String),
}