webrtc_media/
error.rs

1use std::io;
2
3use thiserror::Error;
4
5pub type Result<T> = std::result::Result<T, Error>;
6
7#[derive(Error, Debug, PartialEq)]
8#[non_exhaustive]
9pub enum Error {
10    #[error("stream is nil")]
11    ErrNilStream,
12    #[error("incomplete frame header")]
13    ErrIncompleteFrameHeader,
14    #[error("incomplete frame data")]
15    ErrIncompleteFrameData,
16    #[error("incomplete file header")]
17    ErrIncompleteFileHeader,
18    #[error("IVF signature mismatch")]
19    ErrSignatureMismatch,
20    #[error("IVF version unknown, parser may not parse correctly")]
21    ErrUnknownIVFVersion,
22
23    #[error("file not opened")]
24    ErrFileNotOpened,
25    #[error("invalid nil packet")]
26    ErrInvalidNilPacket,
27
28    #[error("bad header signature")]
29    ErrBadIDPageSignature,
30    #[error("wrong header, expected beginning of stream")]
31    ErrBadIDPageType,
32    #[error("payload for id page must be 19 bytes")]
33    ErrBadIDPageLength,
34    #[error("bad payload signature")]
35    ErrBadIDPagePayloadSignature,
36    #[error("not enough data for payload header")]
37    ErrShortPageHeader,
38    #[error("expected and actual checksum do not match")]
39    ErrChecksumMismatch,
40
41    #[error("data is not a H264 bitstream")]
42    ErrDataIsNotH264Stream,
43    #[error("Io EOF")]
44    ErrIoEOF,
45
46    #[allow(non_camel_case_types)]
47    #[error("{0}")]
48    Io(#[source] IoError),
49    #[error("{0}")]
50    Rtp(#[from] rtp::Error),
51
52    #[error("{0}")]
53    Other(String),
54}
55
56#[derive(Debug, Error)]
57#[error("io error: {0}")]
58pub struct IoError(#[from] pub io::Error);
59
60// Workaround for wanting PartialEq for io::Error.
61impl PartialEq for IoError {
62    fn eq(&self, other: &Self) -> bool {
63        self.0.kind() == other.0.kind()
64    }
65}
66
67impl From<io::Error> for Error {
68    fn from(e: io::Error) -> Self {
69        Error::Io(IoError(e))
70    }
71}