1 // SPDX-License-Identifier: Apache-2.0
2 
3 use alloc::string::{String, ToString};
4 use core::fmt::{Debug, Display, Formatter, Result};
5 
6 use serde::ser::{Error as SerError, StdError};
7 
8 /// An error occurred during serialization
9 #[derive(Debug)]
10 pub enum Error<T> {
11     /// An error occurred while writing bytes
12     ///
13     /// Contains the underlying error reaturned while writing.
14     Io(T),
15 
16     /// An error indicating a value that cannot be serialized
17     ///
18     /// Contains a description of the problem.
19     Value(String),
20 }
21 
22 impl<T> From<T> for Error<T> {
23     #[inline]
from(value: T) -> Self24     fn from(value: T) -> Self {
25         Error::Io(value)
26     }
27 }
28 
29 impl<T: Debug> Display for Error<T> {
30     #[inline]
fmt(&self, f: &mut Formatter<'_>) -> Result31     fn fmt(&self, f: &mut Formatter<'_>) -> Result {
32         write!(f, "{:?}", self)
33     }
34 }
35 
36 impl<T: Debug> StdError for Error<T> {}
37 
38 impl<T: Debug> SerError for Error<T> {
custom<U: Display>(msg: U) -> Self39     fn custom<U: Display>(msg: U) -> Self {
40         Error::Value(msg.to_string())
41     }
42 }
43