enigma_protocol/
error.rs

1use thiserror::Error;
2
3pub type Result<T> = std::result::Result<T, EnigmaProtocolError>;
4
5#[derive(Debug, Error)]
6pub enum EnigmaProtocolError {
7    #[error("invalid state")]
8    InvalidState,
9    #[error("unknown session")]
10    UnknownSession,
11    #[error("unable to decode packet")]
12    PacketDecode,
13    #[error("packet validation failed")]
14    PacketValidation,
15    #[error("cryptographic failure")]
16    Crypto,
17    #[error("transport failure")]
18    Transport,
19    #[error("attachment error")]
20    Attachment,
21    #[error("size limit exceeded")]
22    SizeLimitExceeded,
23}
24
25impl From<enigma_packet::EnigmaPacketError> for EnigmaProtocolError {
26    fn from(err: enigma_packet::EnigmaPacketError) -> Self {
27        use enigma_packet::EnigmaPacketError as PacketErr;
28        match err {
29            PacketErr::InvalidPacket(_) => EnigmaProtocolError::PacketDecode,
30            PacketErr::UnsupportedVersion(_) => EnigmaProtocolError::PacketValidation,
31            PacketErr::SizeLimitExceeded => EnigmaProtocolError::SizeLimitExceeded,
32            PacketErr::DecodeError(_) => EnigmaProtocolError::PacketDecode,
33            PacketErr::ValidationError(_) => EnigmaProtocolError::PacketValidation,
34        }
35    }
36}
37
38impl From<enigma_aead::EnigmaAeadError> for EnigmaProtocolError {
39    fn from(err: enigma_aead::EnigmaAeadError) -> Self {
40        use enigma_aead::EnigmaAeadError as AeadErr;
41        match err {
42            AeadErr::InvalidPacket(_) => EnigmaProtocolError::PacketDecode,
43            AeadErr::UnsupportedVersion(_) | AeadErr::UnsupportedAlgorithm(_) => {
44                EnigmaProtocolError::PacketValidation
45            }
46            AeadErr::AeadError | AeadErr::CryptoError => EnigmaProtocolError::Crypto,
47            AeadErr::SizeLimitExceeded => EnigmaProtocolError::SizeLimitExceeded,
48        }
49    }
50}
51
52impl From<std::io::Error> for EnigmaProtocolError {
53    fn from(_: std::io::Error) -> Self {
54        EnigmaProtocolError::Transport
55    }
56}