1#[derive(Debug)]
2#[non_exhaustive]
3pub enum Error {
4 InvalidMaTree,
6 GlobalMaTreeNotAvailable,
8 InvalidRctParams,
10 InvalidPaletteParams,
12 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>;