1use thiserror::Error;
4
5pub type Result<T> = core::result::Result<T, Error>;
7
8#[derive(Error, Debug, Clone, PartialEq, Eq)]
10pub enum Error {
11 #[error("Invalid format: expected magic bytes")]
13 InvalidFormat,
14
15 #[error("Unsupported version: {0}")]
17 UnsupportedVersion(u8),
18
19 #[error("Unsupported algorithm: {0}")]
21 UnsupportedAlgorithm(u8),
22
23 #[error("Truncated payload: expected at least {expected} bytes, got {actual}")]
25 TruncatedPayload {
26 expected: usize,
28 actual: usize,
30 },
31
32 #[error("Authentication failed: invalid tag")]
34 AuthenticationFailed,
35
36 #[error("Encryption failed: {0}")]
38 EncryptionFailed(String),
39
40 #[error("Decryption failed: {0}")]
42 DecryptionFailed(String),
43
44 #[error("Decompression failed: {0}")]
46 DecompressionFailed(String),
47
48 #[error("Compression failed: {0}")]
50 CompressionFailed(String),
51
52 #[error("Invalid UTF-8: {0}")]
54 InvalidUtf8(String),
55
56 #[error("Invalid Base64: {0}")]
58 InvalidBase64(String),
59
60 #[error("Invalid hex: {0}")]
62 InvalidHex(String),
63
64 #[error("Size mismatch: expected {expected}, got {actual}")]
66 SizeMismatch {
67 expected: usize,
69 actual: usize,
71 },
72
73 #[error("Missing field: {0}")]
75 MissingField(String),
76
77 #[error("Invalid key format: {0}")]
79 InvalidKeyFormat(String),
80
81 #[error("Invalid key length: expected {expected}, got {actual}")]
83 InvalidKeyLength {
84 expected: usize,
86 actual: usize,
88 },
89
90 #[error("Invalid nonce length: expected {expected}, got {actual}")]
92 InvalidNonceLength {
93 expected: usize,
95 actual: usize,
97 },
98
99 #[error("Signing failed: {0}")]
101 SigningFailed(String),
102
103 #[error("Signature verification failed")]
105 SignatureVerificationFailed,
106
107 #[error("Key generation failed: {0}")]
109 KeyGenerationFailed(String),
110
111 #[error("Key derivation failed: {0}")]
113 KeyDerivationFailed(String),
114
115 #[error("Hash operation failed: {0}")]
117 HashFailed(String),
118
119 #[error("Obfuscation failed: {0}")]
121 ObfuscationFailed(String),
122
123 #[error("Deobfuscation failed: {0}")]
125 DeobfuscationFailed(String),
126
127 #[error("Map generation failed: {0}")]
129 MapGenerationFailed(String),
130
131 #[error("Payload too large: {size} bytes exceeds limit of {limit} bytes")]
133 PayloadTooLarge {
134 size: usize,
136 limit: usize,
138 },
139
140 #[error("Random generation failed: {0}")]
142 RandomFailed(String),
143
144 #[error("Serialization error: {0}")]
146 SerializationError(String),
147
148 #[error("Deserialization error: {0}")]
150 DeserializationError(String),
151}
152
153impl From<base64::DecodeError> for Error {
154 fn from(e: base64::DecodeError) -> Self {
155 Error::InvalidBase64(e.to_string())
156 }
157}
158
159impl From<core::str::Utf8Error> for Error {
160 fn from(e: core::str::Utf8Error) -> Self {
161 Error::InvalidUtf8(e.to_string())
162 }
163}
164
165impl From<serde_json::Error> for Error {
166 fn from(e: serde_json::Error) -> Self {
167 Error::DeserializationError(e.to_string())
168 }
169}
170