1use thiserror::Error;
4
5#[derive(Error, Debug)]
7pub enum MrvbError {
8 #[error("signing failed: {0}")]
9 SigningFailed(String),
10
11 #[error("verification failed: {0}")]
12 VerificationFailed(String),
13
14 #[error("invalid signature")]
15 InvalidSignature,
16
17 #[error("invalid token format: {0}")]
18 InvalidTokenFormat(String),
19
20 #[error("token expired")]
21 TokenExpired,
22
23 #[error("keyset unavailable")]
24 KeysetUnavailable,
25
26 #[error("invalid key length: expected {expected}, got {actual}")]
27 InvalidKeyLength { expected: usize, actual: usize },
28
29 #[error("unsupported algorithm: {0}")]
30 UnsupportedAlgorithm(String),
31
32 #[error("invalid algorithm: expected {expected}, got {actual}")]
33 InvalidAlgorithm { expected: String, actual: String },
34
35 #[error("cryptographic operation failed: {0}")]
36 CryptoError(String),
37
38 #[error("invalid mode: {0}")]
39 InvalidMode(String),
40
41 #[error("encoding/decoding error: {0}")]
42 EncodingError(String),
43
44 #[error("serialization error: {0}")]
45 SerializationError(String),
46
47 #[error("key generation failed: {0}")]
48 KeyGenerationFailed(String),
49
50 #[error("internal error: {0}")]
51 Internal(String),
52}
53
54pub type MrvbResult<T> = Result<T, MrvbError>;
56
57impl From<serde_json::Error> for MrvbError {
58 fn from(e: serde_json::Error) -> Self {
59 MrvbError::SerializationError(e.to_string())
60 }
61}
62
63impl From<base64::DecodeError> for MrvbError {
64 fn from(e: base64::DecodeError) -> Self {
65 MrvbError::EncodingError(e.to_string())
66 }
67}