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