1use core::fmt;
2
3use facet_reflect::ReflectError;
4
5#[derive(Debug)]
7pub enum SerializeError {
8 BufferTooSmall,
10 UnsupportedType(&'static str),
12}
13
14impl fmt::Display for SerializeError {
15 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
16 match self {
17 SerializeError::BufferTooSmall => write!(f, "Buffer too small for serialized data"),
18 SerializeError::UnsupportedType(ty) => {
19 write!(f, "Unsupported type for postcard serialization: {ty}")
20 }
21 }
22 }
23}
24
25#[cfg(feature = "std")]
26impl std::error::Error for SerializeError {}
27
28#[derive(Debug)]
30pub enum DeserializeError {
31 UnexpectedEnd,
33 InvalidData,
35 IntegerOverflow,
37 UnknownField,
39 MissingField(&'static str),
41 UnsupportedShape,
43 UnsupportedType(&'static str),
45 InvalidVariant,
47 InvalidBool,
49 InvalidUtf8,
51 ReflectError(ReflectError),
53 LengthMismatch,
55}
56
57impl From<ReflectError> for DeserializeError {
58 fn from(err: ReflectError) -> Self {
59 Self::ReflectError(err)
60 }
61}
62
63impl fmt::Display for DeserializeError {
64 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
65 match self {
66 DeserializeError::UnexpectedEnd => write!(f, "Unexpected end of input"),
67 DeserializeError::InvalidData => write!(f, "Invalid postcard data"),
68 DeserializeError::IntegerOverflow => {
69 write!(f, "Integer value too large for target type")
70 }
71 DeserializeError::UnknownField => write!(f, "Unknown field encountered"),
72 DeserializeError::MissingField(field) => {
73 write!(f, "Missing required field: {field}")
74 }
75 DeserializeError::UnsupportedShape => {
76 write!(f, "Unsupported shape for deserialization")
77 }
78 DeserializeError::UnsupportedType(ty) => {
79 write!(f, "Unsupported type for deserialization: {ty}")
80 }
81 DeserializeError::InvalidVariant => write!(f, "Invalid enum variant index"),
82 DeserializeError::InvalidBool => write!(f, "Invalid boolean value (expected 0 or 1)"),
83 DeserializeError::InvalidUtf8 => write!(f, "Invalid UTF-8 in string data"),
84 DeserializeError::ReflectError(err) => write!(f, "Reflection error: {err}"),
85 DeserializeError::LengthMismatch => write!(f, "Sequence length mismatch"),
86 }
87 }
88}
89
90#[cfg(feature = "std")]
91impl std::error::Error for DeserializeError {}