use thiserror::Error;
pub type Result<T> = core::result::Result<T, Error>;
#[derive(Error, Debug, Clone, PartialEq, Eq)]
pub enum Error {
#[error("Invalid format: expected magic bytes")]
InvalidFormat,
#[error("Unsupported version: {0}")]
UnsupportedVersion(u8),
#[error("Unsupported algorithm: {0}")]
UnsupportedAlgorithm(u8),
#[error("Truncated payload: expected at least {expected} bytes, got {actual}")]
TruncatedPayload {
expected: usize,
actual: usize,
},
#[error("Authentication failed: invalid tag")]
AuthenticationFailed,
#[error("Encryption failed: {0}")]
EncryptionFailed(String),
#[error("Decryption failed: {0}")]
DecryptionFailed(String),
#[error("Decompression failed: {0}")]
DecompressionFailed(String),
#[error("Compression failed: {0}")]
CompressionFailed(String),
#[error("Invalid UTF-8: {0}")]
InvalidUtf8(String),
#[error("Invalid Base64: {0}")]
InvalidBase64(String),
#[error("Invalid hex: {0}")]
InvalidHex(String),
#[error("Size mismatch: expected {expected}, got {actual}")]
SizeMismatch {
expected: usize,
actual: usize,
},
#[error("Missing field: {0}")]
MissingField(String),
#[error("Invalid key format: {0}")]
InvalidKeyFormat(String),
#[error("Invalid key length: expected {expected}, got {actual}")]
InvalidKeyLength {
expected: usize,
actual: usize,
},
#[error("Invalid nonce length: expected {expected}, got {actual}")]
InvalidNonceLength {
expected: usize,
actual: usize,
},
#[error("Signing failed: {0}")]
SigningFailed(String),
#[error("Signature verification failed")]
SignatureVerificationFailed,
#[error("Key generation failed: {0}")]
KeyGenerationFailed(String),
#[error("Key derivation failed: {0}")]
KeyDerivationFailed(String),
#[error("Hash operation failed: {0}")]
HashFailed(String),
#[error("Obfuscation failed: {0}")]
ObfuscationFailed(String),
#[error("Deobfuscation failed: {0}")]
DeobfuscationFailed(String),
#[error("Map generation failed: {0}")]
MapGenerationFailed(String),
#[error("Payload too large: {size} bytes exceeds limit of {limit} bytes")]
PayloadTooLarge {
size: usize,
limit: usize,
},
#[error("Random generation failed: {0}")]
RandomFailed(String),
#[error("Serialization error: {0}")]
SerializationError(String),
#[error("Deserialization error: {0}")]
DeserializationError(String),
}
impl From<base64::DecodeError> for Error {
fn from(e: base64::DecodeError) -> Self {
Error::InvalidBase64(e.to_string())
}
}
impl From<core::str::Utf8Error> for Error {
fn from(e: core::str::Utf8Error) -> Self {
Error::InvalidUtf8(e.to_string())
}
}
impl From<serde_json::Error> for Error {
fn from(e: serde_json::Error) -> Self {
Error::DeserializationError(e.to_string())
}
}