ntex_amqp_codec/
error.rs

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}