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("Unsupported fused preset: {0}")]
25 UnsupportedPreset(u8),
26
27 #[error("Truncated payload: expected at least {expected} bytes, got {actual}")]
29 TruncatedPayload {
30 expected: usize,
32 actual: usize,
34 },
35
36 #[error("Authentication failed: invalid tag")]
38 AuthenticationFailed,
39
40 #[error("Encryption failed: {0}")]
42 EncryptionFailed(String),
43
44 #[error("Decryption failed: {0}")]
46 DecryptionFailed(String),
47
48 #[error("Decompression failed: {0}")]
50 DecompressionFailed(String),
51
52 #[error("Compression failed: {0}")]
54 CompressionFailed(String),
55
56 #[error("Invalid UTF-8: {0}")]
58 InvalidUtf8(String),
59
60 #[error("Invalid Base64: {0}")]
62 InvalidBase64(String),
63
64 #[error("Invalid hex: {0}")]
66 InvalidHex(String),
67
68 #[error("Size mismatch: expected {expected}, got {actual}")]
70 SizeMismatch {
71 expected: usize,
73 actual: usize,
75 },
76
77 #[error("Missing field: {0}")]
79 MissingField(String),
80
81 #[error("Invalid key format: {0}")]
83 InvalidKeyFormat(String),
84
85 #[error("Invalid key length: expected {expected}, got {actual}")]
87 InvalidKeyLength {
88 expected: usize,
90 actual: usize,
92 },
93
94 #[error("Invalid nonce length: expected {expected}, got {actual}")]
96 InvalidNonceLength {
97 expected: usize,
99 actual: usize,
101 },
102
103 #[error("Invalid configuration: {0}")]
105 InvalidConfiguration(String),
106
107 #[error("Signing failed: {0}")]
109 SigningFailed(String),
110
111 #[error("Signature verification failed")]
113 SignatureVerificationFailed,
114
115 #[error("Key generation failed: {0}")]
117 KeyGenerationFailed(String),
118
119 #[error("Key derivation failed: {0}")]
121 KeyDerivationFailed(String),
122
123 #[error("Hash operation failed: {0}")]
125 HashFailed(String),
126
127 #[error("Payload too large: {size} bytes exceeds limit of {limit} bytes")]
129 PayloadTooLarge {
130 size: usize,
132 limit: usize,
134 },
135
136 #[error("Random generation failed: {0}")]
138 RandomFailed(String),
139
140 #[error("Serialization error: {0}")]
142 SerializationError(String),
143
144 #[error("Deserialization error: {0}")]
146 DeserializationError(String),
147}
148
149impl From<base64::DecodeError> for Error {
150 fn from(e: base64::DecodeError) -> Self {
151 Error::InvalidBase64(e.to_string())
152 }
153}
154
155impl From<core::str::Utf8Error> for Error {
156 fn from(e: core::str::Utf8Error) -> Self {
157 Error::InvalidUtf8(e.to_string())
158 }
159}
160
161impl From<serde_json::Error> for Error {
162 fn from(e: serde_json::Error) -> Self {
163 Error::DeserializationError(e.to_string())
164 }
165}