xref: /webrtc/rtcp/src/error.rs (revision ffe74184)
1*ffe74184SMartin Algesten use thiserror::Error;
2*ffe74184SMartin Algesten 
3*ffe74184SMartin Algesten pub type Result<T> = std::result::Result<T, Error>;
4*ffe74184SMartin Algesten 
5*ffe74184SMartin Algesten #[derive(Error, Debug, PartialEq)]
6*ffe74184SMartin Algesten #[non_exhaustive]
7*ffe74184SMartin Algesten pub enum Error {
8*ffe74184SMartin Algesten     /// Wrong marshal size.
9*ffe74184SMartin Algesten     #[error("Wrong marshal size")]
10*ffe74184SMartin Algesten     WrongMarshalSize,
11*ffe74184SMartin Algesten     /// Packet lost exceeds maximum amount of packets
12*ffe74184SMartin Algesten     /// that can possibly be lost.
13*ffe74184SMartin Algesten     #[error("Invalid total lost count")]
14*ffe74184SMartin Algesten     InvalidTotalLost,
15*ffe74184SMartin Algesten     /// Packet contains an invalid header.
16*ffe74184SMartin Algesten     #[error("Invalid header")]
17*ffe74184SMartin Algesten     InvalidHeader,
18*ffe74184SMartin Algesten     /// Packet contains empty compound.
19*ffe74184SMartin Algesten     #[error("Empty compound packet")]
20*ffe74184SMartin Algesten     EmptyCompound,
21*ffe74184SMartin Algesten     /// Invalid first packet in compound packets. First packet
22*ffe74184SMartin Algesten     /// should either be a SenderReport packet or ReceiverReport
23*ffe74184SMartin Algesten     #[error("First packet in compound must be SR or RR")]
24*ffe74184SMartin Algesten     BadFirstPacket,
25*ffe74184SMartin Algesten     /// CNAME was not defined.
26*ffe74184SMartin Algesten     #[error("Compound missing SourceDescription with CNAME")]
27*ffe74184SMartin Algesten     MissingCname,
28*ffe74184SMartin Algesten     /// Packet was defined before CNAME.
29*ffe74184SMartin Algesten     #[error("Feedback packet seen before CNAME")]
30*ffe74184SMartin Algesten     PacketBeforeCname,
31*ffe74184SMartin Algesten     /// Too many reports.
32*ffe74184SMartin Algesten     #[error("Too many reports")]
33*ffe74184SMartin Algesten     TooManyReports,
34*ffe74184SMartin Algesten     /// Too many chunks.
35*ffe74184SMartin Algesten     #[error("Too many chunks")]
36*ffe74184SMartin Algesten     TooManyChunks,
37*ffe74184SMartin Algesten     /// Too many sources.
38*ffe74184SMartin Algesten     #[error("too many sources")]
39*ffe74184SMartin Algesten     TooManySources,
40*ffe74184SMartin Algesten     /// Packet received is too short.
41*ffe74184SMartin Algesten     #[error("Packet status chunk must be 2 bytes")]
42*ffe74184SMartin Algesten     PacketTooShort,
43*ffe74184SMartin Algesten     /// Buffer is too short.
44*ffe74184SMartin Algesten     #[error("Buffer too short to be written")]
45*ffe74184SMartin Algesten     BufferTooShort,
46*ffe74184SMartin Algesten     /// Wrong packet type.
47*ffe74184SMartin Algesten     #[error("Wrong packet type")]
48*ffe74184SMartin Algesten     WrongType,
49*ffe74184SMartin Algesten     /// SDES received is too long.
50*ffe74184SMartin Algesten     #[error("SDES must be < 255 octets long")]
51*ffe74184SMartin Algesten     SdesTextTooLong,
52*ffe74184SMartin Algesten     /// SDES type is missing.
53*ffe74184SMartin Algesten     #[error("SDES item missing type")]
54*ffe74184SMartin Algesten     SdesMissingType,
55*ffe74184SMartin Algesten     /// Reason is too long.
56*ffe74184SMartin Algesten     #[error("Reason must be < 255 octets long")]
57*ffe74184SMartin Algesten     ReasonTooLong,
58*ffe74184SMartin Algesten     /// Invalid packet version.
59*ffe74184SMartin Algesten     #[error("Invalid packet version")]
60*ffe74184SMartin Algesten     BadVersion,
61*ffe74184SMartin Algesten     /// Invalid padding value.
62*ffe74184SMartin Algesten     #[error("Invalid padding value")]
63*ffe74184SMartin Algesten     WrongPadding,
64*ffe74184SMartin Algesten     /// Wrong feedback message type.
65*ffe74184SMartin Algesten     #[error("Wrong feedback message type")]
66*ffe74184SMartin Algesten     WrongFeedbackType,
67*ffe74184SMartin Algesten     /// Wrong payload type.
68*ffe74184SMartin Algesten     #[error("Wrong payload type")]
69*ffe74184SMartin Algesten     WrongPayloadType,
70*ffe74184SMartin Algesten     /// Header length is too small.
71*ffe74184SMartin Algesten     #[error("Header length is too small")]
72*ffe74184SMartin Algesten     HeaderTooSmall,
73*ffe74184SMartin Algesten     /// Media ssrc was defined as zero.
74*ffe74184SMartin Algesten     #[error("Media SSRC must be 0")]
75*ffe74184SMartin Algesten     SsrcMustBeZero,
76*ffe74184SMartin Algesten     /// Missing REMB identifier.
77*ffe74184SMartin Algesten     #[error("Missing REMB identifier")]
78*ffe74184SMartin Algesten     MissingRembIdentifier,
79*ffe74184SMartin Algesten     /// SSRC number and length mismatches.
80*ffe74184SMartin Algesten     #[error("SSRC num and length do not match")]
81*ffe74184SMartin Algesten     SsrcNumAndLengthMismatch,
82*ffe74184SMartin Algesten     /// Invalid size or start index.
83*ffe74184SMartin Algesten     #[error("Invalid size or startIndex")]
84*ffe74184SMartin Algesten     InvalidSizeOrStartIndex,
85*ffe74184SMartin Algesten     /// Delta exceeds limit.
86*ffe74184SMartin Algesten     #[error("Delta exceed limit")]
87*ffe74184SMartin Algesten     DeltaExceedLimit,
88*ffe74184SMartin Algesten     /// Packet status chunk is not 2 bytes.
89*ffe74184SMartin Algesten     #[error("Packet status chunk must be 2 bytes")]
90*ffe74184SMartin Algesten     PacketStatusChunkLength,
91*ffe74184SMartin Algesten     #[error("Invalid bitrate")]
92*ffe74184SMartin Algesten     InvalidBitrate,
93*ffe74184SMartin Algesten     #[error("Wrong chunk type")]
94*ffe74184SMartin Algesten     WrongChunkType,
95*ffe74184SMartin Algesten     #[error("Struct contains unexpected member type")]
96*ffe74184SMartin Algesten     BadStructMemberType,
97*ffe74184SMartin Algesten     #[error("Cannot read into non-pointer")]
98*ffe74184SMartin Algesten     BadReadParameter,
99*ffe74184SMartin Algesten 
100*ffe74184SMartin Algesten     #[error("{0}")]
101*ffe74184SMartin Algesten     Util(#[from] util::Error),
102*ffe74184SMartin Algesten 
103*ffe74184SMartin Algesten     #[error("{0}")]
104*ffe74184SMartin Algesten     Other(String),
105*ffe74184SMartin Algesten }
106*ffe74184SMartin Algesten 
107*ffe74184SMartin Algesten impl From<Error> for util::Error {
from(e: Error) -> Self108*ffe74184SMartin Algesten     fn from(e: Error) -> Self {
109*ffe74184SMartin Algesten         util::Error::from_std(e)
110*ffe74184SMartin Algesten     }
111*ffe74184SMartin Algesten }
112*ffe74184SMartin Algesten 
113*ffe74184SMartin Algesten impl PartialEq<util::Error> for Error {
eq(&self, other: &util::Error) -> bool114*ffe74184SMartin Algesten     fn eq(&self, other: &util::Error) -> bool {
115*ffe74184SMartin Algesten         if let Some(down) = other.downcast_ref::<Error>() {
116*ffe74184SMartin Algesten             return self == down;
117*ffe74184SMartin Algesten         }
118*ffe74184SMartin Algesten         false
119*ffe74184SMartin Algesten     }
120*ffe74184SMartin Algesten }
121