trustchain_core/
vc.rs

1//! Verifiable credential functionality for Trustchain.
2use crate::verifier::VerifierError;
3use ssi::vc::{CredentialSubject, OneOrMany, VerificationResult};
4use thiserror::Error;
5
6/// An error relating to verifiable credentials and presentations.
7#[derive(Error, Debug)]
8pub enum CredentialError {
9    /// No issuer present in credential.
10    #[error("No issuer.")]
11    NoIssuerPresent,
12    /// No proof present in credential.
13    #[error("No proof.")]
14    NoProofPresent,
15    /// Missing verification method in credential proof.
16    #[error("Missing verification method in credential proof.")]
17    MissingVerificationMethod,
18    /// Failed to decode JWT error.
19    #[error("Failed to decode JWT.")]
20    FailedToDecodeJWT,
21    /// Wrapped error for Verifier error.
22    #[error("A wrapped Verifier error: {0}")]
23    VerifierError(VerifierError),
24    /// Wrapped verification result with errors.
25    #[error("A wrapped verification result error: {0:?}")]
26    VerificationResultError(VerificationResult),
27}
28
29/// An error relating to a verifiable credential for a dataset.
30#[derive(Error, Debug)]
31pub enum DataCredentialError {
32    /// Wrapped CredentialError
33    #[error("Credential error: {0:?}")]
34    CredentialError(CredentialError),
35    /// Hash digests do not match.
36    #[error("Hash digests do not match. Expected: {0}. Actual: {1}.")]
37    MismatchedHashDigests(String, String),
38    /// Multiple credential subjects
39    #[error("Multiple credential subjects: {0:?}")]
40    ManyCredentialSubject(OneOrMany<CredentialSubject>),
41    /// Missing attribute
42    #[error("Missing attribute: {0}")]
43    MissingAttribute(String),
44}
45
46impl From<CredentialError> for DataCredentialError {
47    fn from(err: CredentialError) -> Self {
48        DataCredentialError::CredentialError(err)
49    }
50}
51
52impl From<VerifierError> for CredentialError {
53    fn from(err: VerifierError) -> Self {
54        CredentialError::VerifierError(err)
55    }
56}