amqp_codec/
errors.rs

1use uuid;
2
3use crate::protocol::ProtocolId;
4use crate::types::Descriptor;
5
6#[derive(Debug, Display, From, Clone)]
7pub enum AmqpParseError {
8    #[display(fmt = "Loaded item size is invalid")]
9    InvalidSize,
10    #[display(fmt = "More data required during frame parsing: '{:?}'", "_0")]
11    Incomplete(Option<usize>),
12    #[from(ignore)]
13    #[display(fmt = "Unexpected format code: '{}'", "_0")]
14    InvalidFormatCode(u8),
15    #[display(fmt = "Invalid value converting to char: {}", "_0")]
16    InvalidChar(u32),
17    #[display(fmt = "Unexpected descriptor: '{:?}'", "_0")]
18    InvalidDescriptor(Descriptor),
19    #[from(ignore)]
20    #[display(fmt = "Unexpected frame type: '{:?}'", "_0")]
21    UnexpectedFrameType(u8),
22    #[from(ignore)]
23    #[display(fmt = "Required field '{:?}' was omitted.", "_0")]
24    RequiredFieldOmitted(&'static str),
25    #[from(ignore)]
26    #[display(fmt = "Unknown {:?} option.", "_0")]
27    UnknownEnumOption(&'static str),
28    UuidParseError(uuid::Error),
29    Utf8Error(std::str::Utf8Error),
30}
31
32#[derive(Debug, Display, From)]
33pub enum AmqpCodecError {
34    ParseError(AmqpParseError),
35    #[display(fmt = "bytes left unparsed at the frame trail")]
36    UnparsedBytesLeft,
37    #[display(fmt = "max inbound frame size exceeded")]
38    MaxSizeExceeded,
39    #[display(fmt = "Io error: {:?}", _0)]
40    Io(Option<std::io::Error>),
41}
42
43impl Clone for AmqpCodecError {
44    fn clone(&self) -> AmqpCodecError {
45        match self {
46            AmqpCodecError::ParseError(err) => AmqpCodecError::ParseError(err.clone()),
47            AmqpCodecError::UnparsedBytesLeft => AmqpCodecError::UnparsedBytesLeft,
48            AmqpCodecError::MaxSizeExceeded => AmqpCodecError::MaxSizeExceeded,
49            AmqpCodecError::Io(_) => AmqpCodecError::Io(None),
50        }
51    }
52}
53
54impl From<std::io::Error> for AmqpCodecError {
55    fn from(err: std::io::Error) -> AmqpCodecError {
56        AmqpCodecError::Io(Some(err))
57    }
58}
59
60#[derive(Debug, Display, From)]
61pub enum ProtocolIdError {
62    InvalidHeader,
63    Incompatible,
64    Unknown,
65    #[display(fmt = "Expected {:?} protocol id, seen {:?} instead.", exp, got)]
66    Unexpected {
67        exp: ProtocolId,
68        got: ProtocolId,
69    },
70    Disconnected,
71    #[display(fmt = "io error: {:?}", "_0")]
72    Io(std::io::Error),
73}