1#[derive(Debug, thiserror::Error)]
5pub enum EseError {
6 #[error("page {page}: invalid magic {found:#010x}")]
7 InvalidMagic { page: u32, found: u32 },
8
9 #[error("page {page} tag {tag}: record too short ({got} < {need})")]
10 RecordTooShort {
11 page: u32,
12 tag: usize,
13 got: usize,
14 need: usize,
15 },
16
17 #[error("page {page}: tag array overflows page boundary")]
18 TagArrayOverflow { page: u32 },
19
20 #[error("table not found: {name}")]
21 TableNotFound { name: String },
22
23 #[error("page {page}: {detail}")]
24 Corrupt { page: u32, detail: String },
25
26 #[error("io: {0}")]
27 Io(#[from] std::io::Error),
28}
29
30#[cfg(test)]
31mod tests {
32 use super::*;
33
34 #[test]
35 fn ese_error_invalid_magic_display() {
36 let err = EseError::InvalidMagic {
37 page: 0,
38 found: 0xDEAD_BEEF,
39 };
40 assert!(format!("{err}").contains("invalid magic"));
41 }
42
43 #[test]
44 fn ese_error_record_too_short_display() {
45 let err = EseError::RecordTooShort {
46 page: 7,
47 tag: 2,
48 got: 10,
49 need: 32,
50 };
51 assert!(format!("{err}").contains("record too short"));
52 assert!(format!("{err}").contains("10 < 32"));
53 }
54
55 #[test]
56 fn ese_error_tag_array_overflow_display() {
57 let err = EseError::TagArrayOverflow { page: 5 };
58 assert!(format!("{err}").contains("tag array"));
59 }
60
61 #[test]
62 fn ese_error_table_not_found_display() {
63 let err = EseError::TableNotFound {
64 name: "MyTable".into(),
65 };
66 assert!(format!("{err}").contains("MyTable"));
67 }
68
69 #[test]
70 fn ese_error_corrupt_display() {
71 let err = EseError::Corrupt {
72 page: 3,
73 detail: "something bad".into(),
74 };
75 assert!(format!("{err}").contains("page 3"));
76 assert!(format!("{err}").contains("something bad"));
77 }
78}