Skip to main content

irtt_proto/
error.rs

1use thiserror::Error;
2
3pub type Result<T> = std::result::Result<T, ProtoError>;
4
5#[derive(Debug, Error, PartialEq, Eq)]
6pub enum ProtoError {
7    #[error("packet is too short: needed {needed} bytes, got {actual}")]
8    PacketTooShort { needed: usize, actual: usize },
9    #[error("bad packet length: expected {expected} bytes, got {actual}")]
10    PacketLengthMismatch { expected: usize, actual: usize },
11    #[error("bad magic bytes")]
12    BadMagic,
13    #[error("reserved flag bits are set: 0x{0:02x}")]
14    ReservedFlags(u8),
15    #[error("required flag 0x{0:02x} is missing")]
16    MissingFlag(u8),
17    #[error("unexpected flag 0x{0:02x} is set")]
18    UnexpectedFlag(u8),
19    #[error("HMAC flag/key mismatch")]
20    HmacPresenceMismatch,
21    #[error("HMAC verification failed")]
22    BadHmac,
23    #[error("invalid HMAC field offset")]
24    InvalidHmacOffset,
25    #[error("varint is truncated")]
26    TruncatedVarint,
27    #[error("varint is too long")]
28    VarintOverflow,
29    #[error("string value is not valid UTF-8")]
30    InvalidUtf8,
31    #[error("invalid enum value {value} for {name}")]
32    InvalidEnum { name: &'static str, value: i64 },
33    #[error("packet length {length} cannot be represented as a buffer length")]
34    PacketLengthUnrepresentable { length: i64 },
35    #[error("parameter {tag} length is too large: {length} bytes")]
36    ParameterLengthTooLarge { tag: u64, length: u64 },
37    #[error("open reply has zero token without close flag")]
38    ZeroToken,
39    #[error("trailing or malformed parameter payload")]
40    MalformedParams,
41    #[error("payload is too large: {provided} bytes provided, {available} bytes available")]
42    PayloadTooLarge { available: usize, provided: usize },
43    #[error("required packet field {0} is missing")]
44    MissingField(&'static str),
45    #[error("packet field {0} is not present in the negotiated layout")]
46    UnexpectedField(&'static str),
47}