Skip to main content

lunar_image/
error.rs

1use thiserror::Error;
2
3/// errors that can occur when decoding a .li image.
4///
5/// covers header validation, chunk parsing, and decompression failures.
6#[derive(Debug, Error)]
7pub enum DecodeError {
8	#[error("file too short for header")]
9	TruncatedHeader,
10
11	#[error("invalid magic bytes: expected LIF, got {0:?}")]
12	InvalidMagic([u8; 4]),
13
14	#[error("unsupported format version: {0}")]
15	UnsupportedVersion(u16),
16
17	#[error("unknown flag bits set: {0:#06x}")]
18	UnknownFlags(u16),
19
20	#[error("missing required pixel data chunk")]
21	MissingPixelData,
22
23	#[error("multiple pixel data chunks")]
24	MultiplePixelData,
25
26	#[error("pixel data size mismatch: expected {expected}, got {actual}")]
27	SizeMismatch { expected: usize, actual: usize },
28
29	#[error("zstd decompression failed: {0}")]
30	ZstdError(#[from] std::io::Error),
31
32	#[error("unexpected end of file")]
33	TruncatedChunk,
34}
35
36/// errors that can occur when encoding a .li image.
37///
38/// covers dimension validation, pixel buffer validation, and compression failures.
39#[derive(Debug, Error)]
40pub enum EncodeError {
41	#[error("image dimensions too large: {width}x{height}")]
42	DimensionsTooLarge { width: u32, height: u32 },
43
44	#[error("pixel buffer size mismatch: expected {expected}, got {actual}")]
45	BufferSizeMismatch { expected: usize, actual: usize },
46
47	#[error("zstd compression failed: {0}")]
48	ZstdError(#[from] std::io::Error),
49}