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
60impl 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}