Skip to main content

ntex_amqp_codec/
error.rs

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}