1use std::fmt;
2
3#[derive(Debug, Clone, PartialEq, Eq)]
4pub enum DecodeError {
5 EmptyInput,
6 UnknownTag(u8),
7 InvalidUtf8,
8 InvalidJson(String),
9 InvalidTemporal(String),
10 InvalidSpatial(String),
11 InvalidList(String),
12 InvalidVector(String),
13 InvalidStorageClass(&'static str),
14 UnexpectedTag { expected: &'static str, actual: u8 },
15 Truncated,
16 NonCanonical(&'static str),
17}
18
19impl fmt::Display for DecodeError {
20 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
21 match self {
22 Self::EmptyInput => write!(f, "empty input"),
23 Self::UnknownTag(tag) => write!(f, "unknown tag 0x{tag:02x}"),
24 Self::InvalidUtf8 => write!(f, "invalid UTF-8"),
25 Self::InvalidJson(msg) => write!(f, "invalid JSON: {msg}"),
26 Self::InvalidTemporal(msg) => write!(f, "invalid temporal value: {msg}"),
27 Self::InvalidSpatial(msg) => write!(f, "invalid spatial value: {msg}"),
28 Self::InvalidList(msg) => write!(f, "invalid list value: {msg}"),
29 Self::InvalidVector(msg) => write!(f, "invalid vector value: {msg}"),
30 Self::InvalidStorageClass(msg) => write!(f, "invalid storage class: {msg}"),
31 Self::UnexpectedTag { expected, actual } => {
32 write!(f, "unexpected tag 0x{actual:02x}, expected {expected}")
33 }
34 Self::Truncated => write!(f, "truncated input"),
35 Self::NonCanonical(msg) => write!(f, "non-canonical encoding: {msg}"),
36 }
37 }
38}
39
40impl std::error::Error for DecodeError {}
41
42#[derive(Debug, Clone, PartialEq, Eq)]
43pub enum EncodeError {
44 InvalidTemporal(&'static str),
45 InvalidSpatial(&'static str),
46 InvalidList(&'static str),
47 InvalidVector(&'static str),
48 NonCanonicalValue(&'static str),
49}
50
51impl fmt::Display for EncodeError {
52 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
53 match self {
54 Self::InvalidTemporal(msg) => write!(f, "invalid temporal value: {msg}"),
55 Self::InvalidSpatial(msg) => write!(f, "invalid spatial value: {msg}"),
56 Self::InvalidList(msg) => write!(f, "invalid list value: {msg}"),
57 Self::InvalidVector(msg) => write!(f, "invalid vector value: {msg}"),
58 Self::NonCanonicalValue(msg) => write!(f, "non-canonical value: {msg}"),
59 }
60 }
61}
62
63impl std::error::Error for EncodeError {}