use thiserror::Error;
#[derive(Error, Debug)]
pub enum MrvbError {
#[error("signing failed: {0}")]
SigningFailed(String),
#[error("verification failed: {0}")]
VerificationFailed(String),
#[error("invalid signature")]
InvalidSignature,
#[error("invalid token format: {0}")]
InvalidTokenFormat(String),
#[error("token expired")]
TokenExpired,
#[error("keyset unavailable")]
KeysetUnavailable,
#[error("invalid key length: expected {expected}, got {actual}")]
InvalidKeyLength { expected: usize, actual: usize },
#[error("unsupported algorithm: {0}")]
UnsupportedAlgorithm(String),
#[error("invalid algorithm: expected {expected}, got {actual}")]
InvalidAlgorithm { expected: String, actual: String },
#[error("cryptographic operation failed: {0}")]
CryptoError(String),
#[error("invalid mode: {0}")]
InvalidMode(String),
#[error("encoding/decoding error: {0}")]
EncodingError(String),
#[error("serialization error: {0}")]
SerializationError(String),
#[error("key generation failed: {0}")]
KeyGenerationFailed(String),
#[error("internal error: {0}")]
Internal(String),
}
pub type MrvbResult<T> = Result<T, MrvbError>;
impl From<serde_json::Error> for MrvbError {
fn from(e: serde_json::Error) -> Self {
MrvbError::SerializationError(e.to_string())
}
}
impl From<base64::DecodeError> for MrvbError {
fn from(e: base64::DecodeError) -> Self {
MrvbError::EncodingError(e.to_string())
}
}