1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
use thiserror::Error;

#[derive(Error, Debug, Copy, Clone, PartialEq, Eq)]
pub enum SerializeError {
    #[error("serialized value overflowed")]
    Overflow,

    #[error("more elements serialized than expected")]
    TooManyElements,

    #[error("fewer elements serialized than expected")]
    TooFewElements,

    #[error("too deeply nested")]
    TooDeeplyNested,
}

#[derive(Error, Debug, Copy, Clone, PartialEq, Eq)]
pub enum DeserializeError {
    #[error("invalid serialization")]
    InvalidSerialization,

    #[error("unexpected end of input")]
    UnexpectedEoi,

    #[error("unexpected value type")]
    UnexpectedValue,

    #[error("no more elements")]
    NoMoreElements,

    #[error("more elements remain")]
    MoreElementsRemain,

    #[error("too deeply nested")]
    TooDeeplyNested,

    #[error("serialization contains trailing data")]
    TrailingData,
}

#[derive(Error, Debug, Copy, Clone, PartialEq, Eq)]
#[error(transparent)]
pub struct ProtocolVersionError {
    #[from]
    pub(crate) kind: ProtocolVersionErrorKind,
}

#[derive(Error, Debug, Copy, Clone, PartialEq, Eq)]
pub(crate) enum ProtocolVersionErrorKind {
    #[error("invalid major version component")]
    InvalidMajor,

    #[error("invalid minor version component")]
    InvalidMinor,

    #[error("version failed to parse")]
    Parse,
}