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