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