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
use serde::{de, ser};
use std::{error, fmt, result};
#[derive(Debug, PartialEq)]
pub enum Error {
Unexpected(&'static str),
UnsupportedType(&'static str),
UnexpectedVariant(&'static str),
Custom(String),
MissingValue,
InvalidLength,
}
pub type Result<T, E = Error> = result::Result<T, E>;
impl fmt::Display for Error {
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
use self::Error::*;
match self {
Unexpected(expected) => write!(fmt, "unexpected type, expected: {}", expected),
UnsupportedType(ty) => write!(fmt, "unsupported type: {}", ty),
UnexpectedVariant(variant) => write!(fmt, "unexpectec variant: {}", variant),
Custom(e) => write!(fmt, "{}", e),
MissingValue => write!(fmt, "missing value duration deserialization"),
InvalidLength => write!(fmt, "array with invalid length"),
}
}
}
impl error::Error for Error {}
impl ser::Error for Error {
fn custom<T>(msg: T) -> Self
where
T: fmt::Display,
{
Error::Custom(msg.to_string())
}
}
impl de::Error for Error {
fn custom<T>(msg: T) -> Self
where
T: fmt::Display,
{
Error::Custom(msg.to_string())
}
}