1use anyhow::anyhow;
2use std::fmt::{Display, Formatter};
3
4#[derive(Debug)]
5pub enum DataError {
6 Anyhow(anyhow::Error),
7 Str(String),
8 Io(std::io::Error),
9 RollBack,
10 Reset,
11 AnyNotSupported,
12 IgnoredAnyNotSupported,
13}
14
15impl Display for DataError {
16 #[inline]
17 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
18 match self {
19 DataError::Io(err) => Display::fmt(err, f),
20 DataError::Str(err) => {
21 write!(f, "DataError Str:{}", err)
22 }
23 DataError::Anyhow(err) => Display::fmt(err, f),
24 DataError::RollBack => write!(f, "RollBack"),
25 DataError::Reset => write!(f, "Reset"),
26 DataError::AnyNotSupported => write!(f, "Deserialize any not supported"),
27 DataError::IgnoredAnyNotSupported => write!(f, "Deserialize ignored any not supported"),
28 }
29 }
30}
31
32impl std::error::Error for DataError {}
33
34impl serde::ser::Error for DataError {
35 #[inline]
36 fn custom<T>(msg: T) -> Self
37 where
38 T: Display,
39 {
40 DataError::Anyhow(anyhow!("{}", msg))
41 }
42}
43
44impl serde::de::Error for DataError {
45 #[inline]
46 fn custom<T>(msg: T) -> Self
47 where
48 T: Display,
49 {
50 DataError::Anyhow(anyhow!("{}", msg))
51 }
52}
53
54impl From<anyhow::Error> for DataError {
55 #[inline]
56 fn from(err: anyhow::Error) -> Self {
57 DataError::Anyhow(err)
58 }
59}
60
61impl From<std::io::Error> for DataError {
62 #[inline]
63 fn from(err: std::io::Error) -> Self {
64 DataError::Io(err)
65 }
66}