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 #[error("serialization failed: {0}")]
18 Serialization(String),
19
20 #[error("compression failed: {0}")]
21 Compression(String),
22}
23
24#[derive(Debug, Error, PartialEq)]
25pub enum DecodeError {
26 #[error("unexpected EOF: expected {expected} bytes, got {available}")]
27 UnexpectedEof {
28 expected: usize,
29 available: usize,
30 },
31
32 #[error("invalid magic: 0x{0:08X}")]
33 InvalidMagic(u32),
34
35 #[error("unsupported version: {0}")]
36 UnsupportedVersion(u16),
37
38 #[error("unknown type code: {0}")]
39 UnknownTypeCode(u8),
40
41 #[error("unknown encoding: {0}")]
42 UnknownEncoding(u8),
43
44 #[error("reserved tag byte: 0x{0:02X}")]
45 ReservedTag(u8),
46
47 #[error("trailing bytes: {0} remaining after decode")]
48 TrailingBytes(usize),
49
50 #[error("invalid data: {0}")]
51 InvalidData(String),
52
53 #[error("unsupported type: {0}")]
54 UnsupportedType(String),
55
56 #[error("column '{column_name}' decode failed{}: {source}", row_index.map(|r| format!(" at row {}", r)).unwrap_or_default())]
57 ColumnDecodeFailed {
58 column_name: String,
59 row_index: Option<usize>,
60 source: Box<DecodeError>,
61 },
62
63 #[error("deserialization failed: {0}")]
64 Deserialization(String),
65
66 #[error("decompression failed: {0}")]
67 Decompression(String),
68}