1use core::fmt;
5use std::{error, io::Error as IoError};
6
7use weakauras_codec_ace_serialize::error::{
8 DeserializationError as AceSerializeDeserializationError,
9 SerializationError as AceSerializeSerializationError,
10};
11use weakauras_codec_base64::error::{
12 DecodeError as Base64DecodeError, EncodeError as Base64EncodeError,
13};
14#[cfg(feature = "legacy-strings-decoding")]
15use weakauras_codec_lib_compress::error::DecompressionError as LibCompressDecompressionError;
16use weakauras_codec_lib_serialize::error::{
17 DeserializationError as LibSerializeDeserializationError,
18 SerializationError as LibSerializeSerializationError,
19};
20
21#[derive(Debug)]
23#[non_exhaustive]
24pub enum DecodeError {
25 #[cfg(not(feature = "legacy-strings-decoding"))]
26 InvalidPrefix,
28 Base64DecodeError(Base64DecodeError),
30 #[cfg(feature = "legacy-strings-decoding")]
31 LibCompressDecompressionError(LibCompressDecompressionError),
33 IoError(IoError),
35 DataExceedsMaxSize,
37 AceSerializeDeserializationError(AceSerializeDeserializationError),
39 LibSerializeDeserializationError(LibSerializeDeserializationError),
41}
42
43impl From<Base64DecodeError> for DecodeError {
44 fn from(value: Base64DecodeError) -> Self {
45 Self::Base64DecodeError(value)
46 }
47}
48
49#[cfg(feature = "legacy-strings-decoding")]
50impl From<LibCompressDecompressionError> for DecodeError {
51 fn from(value: LibCompressDecompressionError) -> Self {
52 match value {
53 LibCompressDecompressionError::DataExceedsMaxSize => Self::DataExceedsMaxSize,
54 _ => Self::LibCompressDecompressionError(value),
55 }
56 }
57}
58
59impl From<IoError> for DecodeError {
60 fn from(value: IoError) -> Self {
61 Self::IoError(value)
62 }
63}
64
65impl From<AceSerializeDeserializationError> for DecodeError {
66 fn from(value: AceSerializeDeserializationError) -> Self {
67 Self::AceSerializeDeserializationError(value)
68 }
69}
70
71impl From<LibSerializeDeserializationError> for DecodeError {
72 fn from(value: LibSerializeDeserializationError) -> Self {
73 Self::LibSerializeDeserializationError(value)
74 }
75}
76
77impl fmt::Display for DecodeError {
78 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
79 match self {
80 #[cfg(not(feature = "legacy-strings-decoding"))]
81 Self::InvalidPrefix => write!(f, "Invalid prefix"),
82 Self::Base64DecodeError(inner) => write!(f, "Failed to decode base64: {}", inner),
83 #[cfg(feature = "legacy-strings-decoding")]
84 Self::LibCompressDecompressionError(inner) => {
85 write!(f, "Failed to decompress data: {}", inner)
86 }
87 Self::IoError(inner) => write!(f, "Failed to decompress data: {}", inner),
88 Self::DataExceedsMaxSize => write!(f, "Compressed data exceeds max size"),
89 Self::AceSerializeDeserializationError(inner) => {
90 write!(f, "Failed to deserialize data: {}", inner)
91 }
92 Self::LibSerializeDeserializationError(inner) => {
93 write!(f, "Failed to deserialize data: {}", inner)
94 }
95 }
96 }
97}
98
99impl error::Error for DecodeError {
100 fn source(&self) -> Option<&(dyn error::Error + 'static)> {
101 match self {
102 #[cfg(not(feature = "legacy-strings-decoding"))]
103 Self::InvalidPrefix => None,
104 Self::Base64DecodeError(inner) => Some(inner),
105 #[cfg(feature = "legacy-strings-decoding")]
106 Self::LibCompressDecompressionError(inner) => Some(inner),
107 Self::IoError(inner) => Some(inner),
108 Self::DataExceedsMaxSize => None,
109 Self::AceSerializeDeserializationError(inner) => Some(inner),
110 Self::LibSerializeDeserializationError(inner) => Some(inner),
111 }
112 }
113}
114
115#[derive(Debug)]
117#[non_exhaustive]
118pub enum EncodeError {
119 Base64EncodeError(Base64EncodeError),
121 IoError(IoError),
123 AceSerializeSerializationError(AceSerializeSerializationError),
125 LibSerializeSerializationError(LibSerializeSerializationError),
127}
128
129impl From<Base64EncodeError> for EncodeError {
130 fn from(value: Base64EncodeError) -> Self {
131 Self::Base64EncodeError(value)
132 }
133}
134
135impl From<IoError> for EncodeError {
136 fn from(value: IoError) -> Self {
137 Self::IoError(value)
138 }
139}
140
141impl From<AceSerializeSerializationError> for EncodeError {
142 fn from(value: AceSerializeSerializationError) -> Self {
143 Self::AceSerializeSerializationError(value)
144 }
145}
146
147impl From<LibSerializeSerializationError> for EncodeError {
148 fn from(value: LibSerializeSerializationError) -> Self {
149 Self::LibSerializeSerializationError(value)
150 }
151}
152
153impl fmt::Display for EncodeError {
154 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
155 match self {
156 Self::Base64EncodeError(inner) => {
157 write!(f, "Failed to encode data as base64: {}", inner)
158 }
159 Self::IoError(inner) => write!(f, "Failed to compress data: {}", inner),
160 Self::AceSerializeSerializationError(inner) => {
161 write!(f, "Failed to serialize data: {}", inner)
162 }
163 Self::LibSerializeSerializationError(inner) => {
164 write!(f, "Failed to serialize data: {}", inner)
165 }
166 }
167 }
168}
169
170impl error::Error for EncodeError {
171 fn source(&self) -> Option<&(dyn error::Error + 'static)> {
172 match self {
173 Self::Base64EncodeError(inner) => Some(inner),
174 Self::IoError(inner) => Some(inner),
175 Self::AceSerializeSerializationError(inner) => Some(inner),
176 Self::LibSerializeSerializationError(inner) => Some(inner),
177 }
178 }
179}