Skip to main content

ese_core/
error.rs

1//! ESE error types.
2
3/// Errors that can occur when reading an ESE database.
4#[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}