Skip to main content

velr_types/
error.rs

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 {}