jxl_modular/
error.rs

1#[derive(Debug)]
2#[non_exhaustive]
3pub enum Error {
4    /// Decoded MA tree is invalid.
5    InvalidMaTree,
6    /// Global MA tree is requested but not available.
7    GlobalMaTreeNotAvailable,
8    /// Decoded Rct transform parameters are invalid.
9    InvalidRctParams,
10    /// Decoded Palette transform parameters are invalid.
11    InvalidPaletteParams,
12    /// Decoded Squeeze transform parameters are invalid.
13    InvalidSqueezeParams,
14    Bitstream(jxl_bitstream::Error),
15    Decoder(jxl_coding::Error),
16    Buffer(jxl_grid::Error),
17}
18
19impl From<jxl_bitstream::Error> for Error {
20    fn from(err: jxl_bitstream::Error) -> Self {
21        Self::Bitstream(err)
22    }
23}
24
25impl From<jxl_coding::Error> for Error {
26    fn from(err: jxl_coding::Error) -> Self {
27        Self::Decoder(err)
28    }
29}
30
31impl From<jxl_grid::Error> for Error {
32    fn from(err: jxl_grid::Error) -> Self {
33        Self::Buffer(err)
34    }
35}
36
37impl std::fmt::Display for Error {
38    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
39        use Error::*;
40
41        match self {
42            Self::InvalidMaTree => write!(f, "invalid meta-adaptive tree"),
43            Self::GlobalMaTreeNotAvailable => {
44                write!(f, "global meta-adaptive tree requested but unavailable")
45            }
46            Self::InvalidRctParams => write!(f, "invalid Rct transform parameters"),
47            Self::InvalidPaletteParams => write!(f, "invalid Palette transform parameters"),
48            Self::InvalidSqueezeParams => write!(f, "invalid Squeeze transform parameters"),
49            Bitstream(err) => write!(f, "bitstream error: {}", err),
50            Decoder(err) => write!(f, "entropy decoder error: {}", err),
51            Buffer(err) => write!(f, "{}", err),
52        }
53    }
54}
55
56impl std::error::Error for Error {
57    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
58        use Error::*;
59
60        match self {
61            Bitstream(err) => Some(err),
62            Decoder(err) => Some(err),
63            Buffer(err) => Some(err),
64            _ => None,
65        }
66    }
67}
68
69impl Error {
70    pub fn unexpected_eof(&self) -> bool {
71        match self {
72            Error::Bitstream(e) => e.unexpected_eof(),
73            Error::Decoder(e) => e.unexpected_eof(),
74            _ => false,
75        }
76    }
77}
78
79pub type Result<T> = std::result::Result<T, Error>;