identity_credential/domain_linkage/
error.rsuse std::error::Error;
pub(crate) type DomainLinkageValidationResult = Result<(), DomainLinkageValidationError>;
#[derive(Debug, thiserror::Error)]
pub struct DomainLinkageValidationError {
pub cause: DomainLinkageValidationErrorCause,
pub source: Option<Box<dyn Error + Send + Sync + 'static>>,
}
impl std::fmt::Display for DomainLinkageValidationError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.cause)
}
}
impl From<DomainLinkageValidationError> for &str {
fn from(value: DomainLinkageValidationError) -> Self {
value.cause.into()
}
}
#[derive(Debug, thiserror::Error, strum::IntoStaticStr)]
#[non_exhaustive]
pub enum DomainLinkageValidationErrorCause {
#[error("invalid credential")]
CredentialValidationError,
#[error("invalid JWT")]
InvalidJwt,
#[error("the expiration date is missing")]
MissingExpirationDate,
#[error("id property is not allowed")]
ImpermissibleIdProperty,
#[error("issuer DID does not match the subject")]
IssuerSubjectMismatch,
#[error("subject id is invalid")]
InvalidSubjectId,
#[error("credential contains multiple subjects")]
MultipleCredentialSubjects,
#[error("invalid issuer DID")]
InvalidIssuer,
#[error("subject id property is missing")]
MissingSubjectId,
#[error("credential type is invalid")]
InvalidTypeProperty,
#[error("the subject's origin does not match the provided domain origin")]
OriginMismatch,
#[error("the subject's origin property is either invalid or missing")]
InvalidSubjectOrigin,
#[error("invalid semantic structure of the domain linkage configuration")]
InvalidStructure,
}