use thiserror::Error;
#[derive(Debug, Error, Clone, PartialEq, Eq)]
pub enum VerifyError {
#[error("schema_violation: {0}")]
SchemaViolation(String),
#[error("signature_invalid: {0}")]
SignatureInvalid(String),
#[error("wrong_signer")]
WrongSigner,
#[error("expired")]
Expired,
#[error("not_yet_valid")]
NotYetValid,
#[error("wrong_issuer: {0}")]
WrongIssuer(String),
#[error("wrong_audience: {0}")]
WrongAudience(String),
#[error("contract_hash_mismatch")]
ContractHashMismatch,
#[error("principal_signature_invalid:{0}")]
PrincipalSignatureInvalid(&'static str),
#[error("state_invalid: {0}")]
StateInvalid(String),
#[error("decision_bit_mismatch")]
DecisionBitMismatch,
#[error("unknown_vk: {0}")]
UnknownVk(String),
#[error("internal_inconsistency: {0}")]
InternalInconsistency(String),
#[error("proof_invalid: {0}")]
ProofInvalid(String),
}
impl VerifyError {
pub fn code(&self) -> String {
match self {
VerifyError::SchemaViolation(_) => "schema_violation".into(),
VerifyError::SignatureInvalid(_) => "signature_invalid".into(),
VerifyError::WrongSigner => "wrong_signer".into(),
VerifyError::Expired => "expired".into(),
VerifyError::NotYetValid => "not_yet_valid".into(),
VerifyError::WrongIssuer(_) => "wrong_issuer".into(),
VerifyError::WrongAudience(_) => "wrong_audience".into(),
VerifyError::ContractHashMismatch => "internal_inconsistency".into(),
VerifyError::PrincipalSignatureInvalid(role) => format!("principal_signature_invalid:{}", role),
VerifyError::StateInvalid(_) => "state_invalid".into(),
VerifyError::DecisionBitMismatch => "decision_bit_mismatch".into(),
VerifyError::UnknownVk(_) => "unknown_vk".into(),
VerifyError::InternalInconsistency(_) => "internal_inconsistency".into(),
VerifyError::ProofInvalid(_) => "proof_invalid".into(),
}
}
}