1use crate::protocol::{AmqpError, ProtocolId};
2pub use crate::protocol::{Error, ErrorInner};
3use crate::types::Descriptor;
4
5#[derive(Debug, Clone, thiserror::Error)]
6pub enum AmqpParseError {
7 #[error("Loaded item size is invalid")]
8 InvalidSize,
9 #[error("More data required during frame parsing: '{:?}'", "_0")]
10 Incomplete(usize),
11 #[error("Unexpected format code: '{}'", "_0")]
12 InvalidFormatCode(u8),
13 #[error("Invalid value converting to char: {}", "_0")]
14 InvalidChar(u32),
15 #[error("Unexpected descriptor: '{:?}'", "_0")]
16 InvalidDescriptor(Box<Descriptor>),
17 #[error("Unexpected frame type: '{:?}'", "_0")]
18 UnexpectedFrameType(u8),
19 #[error("Required field '{:?}' was omitted.", "_0")]
20 RequiredFieldOmitted(&'static str),
21 #[error("Unknown {:?} option.", "_0")]
22 UnknownEnumOption(&'static str),
23 #[error("Cannot parse uuid value")]
24 UuidParseError,
25 #[error("Cannot parse datetime value")]
26 DatetimeParseError,
27 #[error("Unexpected type: '{:?}'", "_0")]
28 UnexpectedType(&'static str),
29 #[error("Value is not valid utf8 string")]
30 Utf8Error,
31}
32
33#[derive(Debug, Clone, thiserror::Error)]
34pub enum AmqpCodecError {
35 #[error("Parse failed: {:?}", _0)]
36 ParseError(#[from] AmqpParseError),
37 #[error("Bytes left unparsed at the frame trail")]
38 UnparsedBytesLeft,
39 #[error("Max inbound frame size exceeded")]
40 MaxSizeExceeded,
41 #[error("Invalid inbound frame size")]
42 InvalidFrameSize,
43}
44
45#[derive(Debug, Clone, thiserror::Error)]
46pub enum ProtocolIdError {
47 #[error("Invalid header")]
48 InvalidHeader,
49 #[error("Incompatible")]
50 Incompatible,
51 #[error("Unknown protocol")]
52 Unknown,
53 #[error("Expected {:?} protocol id, seen {:?} instead.", exp, got)]
54 Unexpected { exp: ProtocolId, got: ProtocolId },
55}
56
57impl From<()> for Error {
58 fn from(_: ()) -> Error {
59 Error(Box::new(ErrorInner {
60 condition: AmqpError::InternalError.into(),
61 description: None,
62 info: None,
63 }))
64 }
65}