1use thiserror::Error;
5
6#[derive(Debug, Error, PartialEq)]
7pub enum EncodeError {
8 #[error("unsupported type: {0}")]
9 UnsupportedType(String),
10
11 #[error("option nesting depth {depth} exceeds the maximum of {max}")]
12 OptionDepthTooDeep {
13 depth: u32,
14 max: u8,
15 },
16}
17
18#[derive(Debug, Error, PartialEq)]
19pub enum DecodeError {
20 #[error("unexpected EOF: expected {expected} bytes, got {available}")]
21 UnexpectedEof {
22 expected: usize,
23 available: usize,
24 },
25
26 #[error("invalid magic: 0x{0:08X}")]
27 InvalidMagic(u32),
28
29 #[error("unsupported version: {0}")]
30 UnsupportedVersion(u16),
31
32 #[error("unknown type code: {0}")]
33 UnknownTypeCode(u8),
34
35 #[error("unknown encoding: {0}")]
36 UnknownEncoding(u8),
37
38 #[error("reserved tag byte: 0x{0:02X}")]
39 ReservedTag(u8),
40
41 #[error("trailing bytes: {0} remaining after decode")]
42 TrailingBytes(usize),
43
44 #[error("invalid data: {0}")]
45 InvalidData(String),
46
47 #[error("unsupported type: {0}")]
48 UnsupportedType(String),
49
50 #[error("column '{column_name}' decode failed{}: {source}", row_index.map(|r| format!(" at row {}", r)).unwrap_or_default())]
51 ColumnDecodeFailed {
52 column_name: String,
53 row_index: Option<usize>,
54 source: Box<DecodeError>,
55 },
56}