xref: /webrtc/rtp/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     #[error("RTP header size insufficient")]
9*ffe74184SMartin Algesten     ErrHeaderSizeInsufficient,
10*ffe74184SMartin Algesten     #[error("RTP header size insufficient for extension")]
11*ffe74184SMartin Algesten     ErrHeaderSizeInsufficientForExtension,
12*ffe74184SMartin Algesten     #[error("buffer too small")]
13*ffe74184SMartin Algesten     ErrBufferTooSmall,
14*ffe74184SMartin Algesten     #[error("extension not enabled")]
15*ffe74184SMartin Algesten     ErrHeaderExtensionsNotEnabled,
16*ffe74184SMartin Algesten     #[error("extension not found")]
17*ffe74184SMartin Algesten     ErrHeaderExtensionNotFound,
18*ffe74184SMartin Algesten 
19*ffe74184SMartin Algesten     #[error("header extension id must be between 1 and 14 for RFC 5285 extensions")]
20*ffe74184SMartin Algesten     ErrRfc8285oneByteHeaderIdrange,
21*ffe74184SMartin Algesten     #[error("header extension payload must be 16bytes or less for RFC 5285 one byte extensions")]
22*ffe74184SMartin Algesten     ErrRfc8285oneByteHeaderSize,
23*ffe74184SMartin Algesten 
24*ffe74184SMartin Algesten     #[error("header extension id must be between 1 and 255 for RFC 5285 extensions")]
25*ffe74184SMartin Algesten     ErrRfc8285twoByteHeaderIdrange,
26*ffe74184SMartin Algesten     #[error("header extension payload must be 255bytes or less for RFC 5285 two byte extensions")]
27*ffe74184SMartin Algesten     ErrRfc8285twoByteHeaderSize,
28*ffe74184SMartin Algesten 
29*ffe74184SMartin Algesten     #[error("header extension id must be 0 for none RFC 5285 extensions")]
30*ffe74184SMartin Algesten     ErrRfc3550headerIdrange,
31*ffe74184SMartin Algesten 
32*ffe74184SMartin Algesten     #[error("packet is not large enough")]
33*ffe74184SMartin Algesten     ErrShortPacket,
34*ffe74184SMartin Algesten     #[error("invalid nil packet")]
35*ffe74184SMartin Algesten     ErrNilPacket,
36*ffe74184SMartin Algesten     #[error("too many PDiff")]
37*ffe74184SMartin Algesten     ErrTooManyPDiff,
38*ffe74184SMartin Algesten     #[error("too many spatial layers")]
39*ffe74184SMartin Algesten     ErrTooManySpatialLayers,
40*ffe74184SMartin Algesten     #[error("NALU Type is unhandled")]
41*ffe74184SMartin Algesten     ErrUnhandledNaluType,
42*ffe74184SMartin Algesten 
43*ffe74184SMartin Algesten     #[error("corrupted h265 packet")]
44*ffe74184SMartin Algesten     ErrH265CorruptedPacket,
45*ffe74184SMartin Algesten     #[error("invalid h265 packet type")]
46*ffe74184SMartin Algesten     ErrInvalidH265PacketType,
47*ffe74184SMartin Algesten 
48*ffe74184SMartin Algesten     #[error("extension_payload must be in 32-bit words")]
49*ffe74184SMartin Algesten     HeaderExtensionPayloadNot32BitWords,
50*ffe74184SMartin Algesten     #[error("audio level overflow")]
51*ffe74184SMartin Algesten     AudioLevelOverflow,
52*ffe74184SMartin Algesten     #[error("payload is not large enough")]
53*ffe74184SMartin Algesten     PayloadIsNotLargeEnough,
54*ffe74184SMartin Algesten     #[error("STAP-A declared size({0}) is larger than buffer({1})")]
55*ffe74184SMartin Algesten     StapASizeLargerThanBuffer(usize, usize),
56*ffe74184SMartin Algesten     #[error("nalu type {0} is currently not handled")]
57*ffe74184SMartin Algesten     NaluTypeIsNotHandled(u8),
58*ffe74184SMartin Algesten     #[error("{0}")]
59*ffe74184SMartin Algesten     Util(#[from] util::Error),
60*ffe74184SMartin Algesten 
61*ffe74184SMartin Algesten     #[error("{0}")]
62*ffe74184SMartin Algesten     Other(String),
63*ffe74184SMartin Algesten }
64*ffe74184SMartin Algesten 
65*ffe74184SMartin Algesten impl From<Error> for util::Error {
from(e: Error) -> Self66*ffe74184SMartin Algesten     fn from(e: Error) -> Self {
67*ffe74184SMartin Algesten         util::Error::from_std(e)
68*ffe74184SMartin Algesten     }
69*ffe74184SMartin Algesten }
70*ffe74184SMartin Algesten 
71*ffe74184SMartin Algesten impl PartialEq<util::Error> for Error {
eq(&self, other: &util::Error) -> bool72*ffe74184SMartin Algesten     fn eq(&self, other: &util::Error) -> bool {
73*ffe74184SMartin Algesten         if let Some(down) = other.downcast_ref::<Error>() {
74*ffe74184SMartin Algesten             self == down
75*ffe74184SMartin Algesten         } else {
76*ffe74184SMartin Algesten             false
77*ffe74184SMartin Algesten         }
78*ffe74184SMartin Algesten     }
79*ffe74184SMartin Algesten }
80