1use thiserror::Error;
2
3#[derive(Debug, Error)]
4pub enum ChangesetError {
5 #[error("invalid magic bytes")]
6 InvalidMagic,
7
8 #[error("unsupported version: {0}")]
9 UnsupportedVersion(u8),
10
11 #[error("checksum mismatch: expected {expected:#018x}, got {actual:#018x}")]
12 ChecksumMismatch { expected: u64, actual: u64 },
13
14 #[error("chain broken: changeset prev_checksum {changeset_prev:#018x} does not match expected {expected:#018x}")]
15 ChainBroken { expected: u64, changeset_prev: u64 },
16
17 #[error("size mismatch: expected {needed} bytes, have {available}")]
18 Truncated { needed: usize, available: usize },
19
20 #[error("page data length {data_len} exceeds page size {page_size}")]
21 PageTooLarge { data_len: u32, page_size: u32 },
22
23 #[error("invalid page_id_size: {0} (expected 4 or 8)")]
24 InvalidPageIdSize(u8),
25
26 #[error("page_size mismatch: header says {header}, expected {expected}")]
27 PageSizeMismatch { header: u32, expected: u32 },
28
29 #[error("invalid flags: {0:#04x}")]
30 InvalidFlags(u8),
31
32 #[error(transparent)]
33 Io(#[from] std::io::Error),
34}