use bh_jws_utils::SigningAlgorithm;
use crate::models::data_retrieval::{
common::{DocType, NameSpace},
device_retrieval::response::DigestID,
};
#[derive(strum_macros::Display, Debug, PartialEq, Clone)]
pub enum MdocError {
#[strum(to_string = "Error in Mobile Security Object")]
MobileSecurityObject,
#[strum(to_string = "Error in Issuer Auth")]
IssuerAuth,
#[strum(to_string = "Error when signing data")]
Signing,
#[strum(to_string = "Error while converting JWK to DeviceKey: {0}")]
JwkToCoseKey(String),
#[strum(to_string = "Error while converting DeviceKey to JWK: {0}")]
CoseKeyToJwk(String),
#[strum(to_string = "Failed to parse Device Response: {0}")]
DeviceResponseParse(String),
#[strum(to_string = "Device Response contains no documents")]
EmptyDeviceResponse,
#[strum(to_string = "Signature validation failed")]
InvalidSignature,
#[strum(to_string = "Signing algorithm is missing or unsupported")]
MissingSigningAlgorithm,
#[strum(to_string = "Signature verifier for the {0} is missing")]
MissingSignatureVerifier(SigningAlgorithm),
#[strum(to_string = "Issuer's public key from `IssuerAuth` is missing or not valid")]
InvalidPublicKey,
#[strum(to_string = "Invalid `doc_type`, expected {0}, actual {1}")]
InvalidDocType(DocType, DocType),
#[strum(to_string = "Document becomes valid at timestamp {0}")]
DocumentNotYetValid(i64),
#[strum(to_string = "Document expired at timestamp {0}")]
DocumentExpired(i64),
#[strum(to_string = "Missing digests for namespace {0}")]
MissingDigestNamespace(NameSpace),
#[strum(to_string = "Missing or invalid digest, namespace=\"{0}\", id=\"{1}\"")]
MissingOrInvalidDigest(NameSpace, DigestID),
#[strum(to_string = "Failed to serialize `DeviceAuthenticationBytes`")]
DeviceAuthentication,
#[strum(to_string = "Device MAC is not supported")]
DeviceMac,
#[strum(to_string = "Missing or invalid X5Chain")]
X5Chain,
#[strum(to_string = "Unable to parse issued credential")]
IssuerSignedParse,
#[strum(to_string = "Invalid value for Date Time")]
InvalidDateTime,
#[strum(to_string = "Invalid Device Signer: {0}")]
InvalidDeviceSigner(String),
#[strum(to_string = "Validity Info is invalid")]
InvalidValidityInfo,
#[strum(to_string = "Invalid Verifier's public JWK")]
InvalidJwkPublic,
}
impl bherror::BhError for MdocError {}
pub type Result<T> = bherror::Result<T, MdocError>;