baseid_bbs/
error.rs

1use baseid_core::error::BilingualError;
2use baseid_core::Language;
3
4#[derive(Debug, thiserror::Error)]
5pub enum BbsError {
6    #[error("key generation failed: {0}")]
7    KeyGeneration(String),
8    #[error("signing failed: {0}")]
9    SigningFailed(String),
10    #[error("verification failed: {0}")]
11    VerificationFailed(String),
12    #[error("proof generation failed: {0}")]
13    ProofGenerationFailed(String),
14    #[error("proof verification failed: {0}")]
15    ProofVerificationFailed(String),
16    #[error("invalid credential: {0}")]
17    InvalidCredential(String),
18    #[error("unsupported predicate: {0}")]
19    UnsupportedPredicate(String),
20}
21
22impl BilingualError for BbsError {
23    fn message(&self, lang: Language) -> &str {
24        match lang {
25            Language::Fr => match self {
26                BbsError::KeyGeneration(_) => "échec de la génération de clé",
27                BbsError::SigningFailed(_) => "échec de la signature",
28                BbsError::VerificationFailed(_) => "échec de la vérification",
29                BbsError::ProofGenerationFailed(_) => "échec de la génération de preuve",
30                BbsError::ProofVerificationFailed(_) => "échec de la vérification de preuve",
31                BbsError::InvalidCredential(_) => "attestation invalide",
32                BbsError::UnsupportedPredicate(_) => "prédicat non supporté",
33            },
34            _ => match self {
35                BbsError::KeyGeneration(m) => m,
36                BbsError::SigningFailed(m) => m,
37                BbsError::VerificationFailed(m) => m,
38                BbsError::ProofGenerationFailed(m) => m,
39                BbsError::ProofVerificationFailed(m) => m,
40                BbsError::InvalidCredential(m) => m,
41                BbsError::UnsupportedPredicate(m) => m,
42            },
43        }
44    }
45}
46
47impl From<BbsError> for baseid_core::Error {
48    fn from(_err: BbsError) -> Self {
49        baseid_core::Error::Crypto(baseid_core::error::CryptoError::VerificationFailed)
50    }
51}