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