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}