fifthtry_serde_sqlite_jsonb/
error.rs1use serde::{de, ser};
2use std::fmt::{self, Display};
3
4use crate::header::ElementType;
5
6pub type Result<T> = std::result::Result<T, Error>;
7
8#[derive(Debug)]
10pub enum Error {
11 Message(String),
12 JsonError(crate::json::JsonError),
13 Json5Error(crate::json::Json5Error),
14 InvalidElementType(u8),
15 UnexpectedType(ElementType),
16 Io(std::io::Error),
17 TrailingCharacters,
18 Utf8(std::string::FromUtf8Error),
19 Empty,
20}
21
22impl ser::Error for Error {
23 fn custom<T: Display>(msg: T) -> Self {
24 Error::Message(msg.to_string())
25 }
26}
27
28impl de::Error for Error {
29 fn custom<T: Display>(msg: T) -> Self {
30 Error::Message(msg.to_string())
31 }
32}
33
34impl Display for Error {
35 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
36 match self {
37 Error::Message(m) => write!(f, "{}", m),
38 Error::JsonError(_) => write!(f, "json error"),
39 Error::Json5Error(_) => write!(f, "json5 error"),
40 Error::InvalidElementType(t) => {
41 write!(f, "{t} is not a valid jsonb element type code")
42 }
43 Error::UnexpectedType(t) => write!(f, "unexpected type: {t:?}"),
44 Error::Io(_) => write!(f, "io error"),
45 Error::TrailingCharacters => {
46 write!(f, "trailing data after the end of the jsonb value")
47 }
48 Error::Utf8(_) => write!(f, "invalid utf8 in string"),
49 Error::Empty => write!(f, "empty jsonb value"),
50 }
51 }
52}
53
54impl std::error::Error for Error {
55 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
56 match self {
57 Error::JsonError(e) => Some(e),
58 Error::Json5Error(e) => Some(e),
59 Error::Io(e) => Some(e),
60 Error::Utf8(e) => Some(e),
61 _ => None,
62 }
63 }
64}
65
66impl From<std::io::Error> for Error {
67 fn from(err: std::io::Error) -> Error {
68 Error::Io(err)
69 }
70}
71
72impl From<std::string::FromUtf8Error> for Error {
73 fn from(err: std::string::FromUtf8Error) -> Self {
74 Error::Utf8(err)
75 }
76}
77
78#[cfg(feature = "serde_json")]
79impl From<crate::json::JsonError> for Error {
80 fn from(err: crate::json::JsonError) -> Error {
81 Error::JsonError(err)
82 }
83}
84
85impl From<crate::json::Json5Error> for Error {
86 fn from(err: crate::json::Json5Error) -> Error {
87 Error::Json5Error(err)
88 }
89}