1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
use simd_json::prelude::ValueType;
use std::fmt;
use std::io;
#[derive(Debug)]
pub enum EncoderError {
InvalidField(&'static str),
InvalidTimestamp(ValueType),
InvalidValue(String, ValueType),
Io(io::Error),
MissingField(&'static str),
}
impl PartialEq for EncoderError {
fn eq(&self, other: &Self) -> bool {
match (self, other) {
(EncoderError::InvalidField(v1), EncoderError::InvalidField(v2))
| (EncoderError::MissingField(v1), EncoderError::MissingField(v2)) => v1 == v2,
(EncoderError::InvalidTimestamp(v1), EncoderError::InvalidTimestamp(v2)) => v1 == v2,
(EncoderError::InvalidValue(k1, v1), EncoderError::InvalidValue(k2, v2)) => {
k1 == k2 && v1 == v2
}
(EncoderError::Io(_), EncoderError::Io(_)) => true,
(_, _) => false,
}
}
}
#[derive(Debug, PartialEq)]
pub enum DecoderError {
EqInTagValue(usize),
Unexpected(usize),
Generic(usize, String),
InvalidFields(usize),
MissingTagValue(usize),
ParseFloatError(usize, lexical::Error),
ParseIntError(usize, lexical::Error),
TrailingCharacter(usize),
InvalidEscape(usize),
UnexpectedEnd(usize),
}
impl fmt::Display for EncoderError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{:?}", self)
}
}
impl fmt::Display for DecoderError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{:?}", self)
}
}
impl std::error::Error for EncoderError {}
impl std::error::Error for DecoderError {}
pub type EncoderResult<T> = std::result::Result<T, EncoderError>;
pub type DecoderResult<T> = std::result::Result<T, DecoderError>;
impl From<io::Error> for EncoderError {
fn from(e: io::Error) -> Self {
Self::Io(e)
}
}