1use std::error::Error;
4use std::fmt;
5
6#[derive(Debug)]
8pub enum IoError {
9 FileError(String),
11 FormatError(String),
13 SerializationError(String),
15 DeserializationError(String),
17 CompressionError(String),
19 DecompressionError(String),
21 UnsupportedCompressionAlgorithm(String),
23 UnsupportedFormat(String),
25 ConversionError(String),
27 FileNotFound(String),
29 NotFound(String),
31 ParseError(String),
33 Io(std::io::Error),
35 ValidationError(String),
37 ChecksumError(String),
39 IntegrityError(String),
41 ConfigError(String),
43 NetworkError(String),
45 ParquetError(String),
47 DatabaseError(String),
49 TimeoutError(String),
51 Other(String),
53}
54
55impl fmt::Display for IoError {
56 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
57 match self {
58 IoError::FileError(msg) => write!(f, "File error: {msg}"),
59 IoError::FormatError(msg) => write!(f, "Format error: {msg}"),
60 IoError::SerializationError(msg) => write!(f, "Serialization error: {msg}"),
61 IoError::DeserializationError(msg) => write!(f, "Deserialization error: {msg}"),
62 IoError::CompressionError(msg) => write!(f, "Compression error: {msg}"),
63 IoError::DecompressionError(msg) => write!(f, "Decompression error: {msg}"),
64 IoError::UnsupportedCompressionAlgorithm(algo) => {
65 write!(f, "Unsupported compression algorithm: {algo}")
66 }
67 IoError::UnsupportedFormat(fmt) => write!(f, "Unsupported format: {fmt}"),
68 IoError::ConversionError(msg) => write!(f, "Conversion error: {msg}"),
69 IoError::FileNotFound(path) => write!(f, "File not found: {path}"),
70 IoError::NotFound(msg) => write!(f, "Not found: {msg}"),
71 IoError::ParseError(msg) => write!(f, "Parse error: {msg}"),
72 IoError::Io(e) => write!(f, "I/O error: {e}"),
73 IoError::ValidationError(msg) => write!(f, "Validation error: {msg}"),
74 IoError::ChecksumError(msg) => write!(f, "Checksum error: {msg}"),
75 IoError::IntegrityError(msg) => write!(f, "Integrity error: {msg}"),
76 IoError::ConfigError(msg) => write!(f, "Configuration error: {msg}"),
77 IoError::NetworkError(msg) => write!(f, "Network error: {msg}"),
78 IoError::ParquetError(msg) => write!(f, "Parquet error: {msg}"),
79 IoError::DatabaseError(msg) => write!(f, "Database error: {msg}"),
80 IoError::TimeoutError(msg) => write!(f, "Timeout error: {msg}"),
81 IoError::Other(msg) => write!(f, "Error: {msg}"),
82 }
83 }
84}
85
86impl Error for IoError {}
87
88impl Clone for IoError {
89 fn clone(&self) -> Self {
90 match self {
91 IoError::FileError(msg) => IoError::FileError(msg.clone()),
92 IoError::FormatError(msg) => IoError::FormatError(msg.clone()),
93 IoError::SerializationError(msg) => IoError::SerializationError(msg.clone()),
94 IoError::DeserializationError(msg) => IoError::DeserializationError(msg.clone()),
95 IoError::CompressionError(msg) => IoError::CompressionError(msg.clone()),
96 IoError::DecompressionError(msg) => IoError::DecompressionError(msg.clone()),
97 IoError::UnsupportedCompressionAlgorithm(algo) => {
98 IoError::UnsupportedCompressionAlgorithm(algo.clone())
99 }
100 IoError::UnsupportedFormat(fmt) => IoError::UnsupportedFormat(fmt.clone()),
101 IoError::ConversionError(msg) => IoError::ConversionError(msg.clone()),
102 IoError::FileNotFound(path) => IoError::FileNotFound(path.clone()),
103 IoError::NotFound(msg) => IoError::NotFound(msg.clone()),
104 IoError::ParseError(msg) => IoError::ParseError(msg.clone()),
105 IoError::Io(e) => IoError::Io(std::io::Error::new(e.kind(), e.to_string())),
106 IoError::ValidationError(msg) => IoError::ValidationError(msg.clone()),
107 IoError::ChecksumError(msg) => IoError::ChecksumError(msg.clone()),
108 IoError::IntegrityError(msg) => IoError::IntegrityError(msg.clone()),
109 IoError::ConfigError(msg) => IoError::ConfigError(msg.clone()),
110 IoError::NetworkError(msg) => IoError::NetworkError(msg.clone()),
111 IoError::ParquetError(msg) => IoError::ParquetError(msg.clone()),
112 IoError::DatabaseError(msg) => IoError::DatabaseError(msg.clone()),
113 IoError::TimeoutError(msg) => IoError::TimeoutError(msg.clone()),
114 IoError::Other(msg) => IoError::Other(msg.clone()),
115 }
116 }
117}
118
119impl From<std::io::Error> for IoError {
120 fn from(err: std::io::Error) -> Self {
121 IoError::Io(err)
122 }
123}
124
125impl PartialEq for IoError {
126 fn eq(&self, other: &Self) -> bool {
127 match (self, other) {
128 (IoError::FileError(a), IoError::FileError(b)) => a == b,
129 (IoError::FormatError(a), IoError::FormatError(b)) => a == b,
130 (IoError::SerializationError(a), IoError::SerializationError(b)) => a == b,
131 (IoError::DeserializationError(a), IoError::DeserializationError(b)) => a == b,
132 (IoError::CompressionError(a), IoError::CompressionError(b)) => a == b,
133 (IoError::DecompressionError(a), IoError::DecompressionError(b)) => a == b,
134 (
135 IoError::UnsupportedCompressionAlgorithm(a),
136 IoError::UnsupportedCompressionAlgorithm(b),
137 ) => a == b,
138 (IoError::UnsupportedFormat(a), IoError::UnsupportedFormat(b)) => a == b,
139 (IoError::ConversionError(a), IoError::ConversionError(b)) => a == b,
140 (IoError::FileNotFound(a), IoError::FileNotFound(b)) => a == b,
141 (IoError::NotFound(a), IoError::NotFound(b)) => a == b,
142 (IoError::ParseError(a), IoError::ParseError(b)) => a == b,
143 (IoError::Io(a), IoError::Io(b)) => {
144 a.kind() == b.kind() && a.to_string() == b.to_string()
145 }
146 (IoError::ValidationError(a), IoError::ValidationError(b)) => a == b,
147 (IoError::ChecksumError(a), IoError::ChecksumError(b)) => a == b,
148 (IoError::IntegrityError(a), IoError::IntegrityError(b)) => a == b,
149 (IoError::ConfigError(a), IoError::ConfigError(b)) => a == b,
150 (IoError::NetworkError(a), IoError::NetworkError(b)) => a == b,
151 (IoError::ParquetError(a), IoError::ParquetError(b)) => a == b,
152 (IoError::DatabaseError(a), IoError::DatabaseError(b)) => a == b,
153 (IoError::TimeoutError(a), IoError::TimeoutError(b)) => a == b,
154 (IoError::Other(a), IoError::Other(b)) => a == b,
155 _ => false,
156 }
157 }
158}
159
160impl Eq for IoError {}
161
162impl PartialOrd for IoError {
163 fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
164 Some(self.cmp(other))
165 }
166}
167
168impl Ord for IoError {
169 fn cmp(&self, other: &Self) -> std::cmp::Ordering {
170 use std::cmp::Ordering;
171
172 match (self, other) {
174 (IoError::FileError(a), IoError::FileError(b)) => a.cmp(b),
176 (IoError::FormatError(a), IoError::FormatError(b)) => a.cmp(b),
177 (IoError::SerializationError(a), IoError::SerializationError(b)) => a.cmp(b),
178 (IoError::DeserializationError(a), IoError::DeserializationError(b)) => a.cmp(b),
179 (IoError::CompressionError(a), IoError::CompressionError(b)) => a.cmp(b),
180 (IoError::DecompressionError(a), IoError::DecompressionError(b)) => a.cmp(b),
181 (
182 IoError::UnsupportedCompressionAlgorithm(a),
183 IoError::UnsupportedCompressionAlgorithm(b),
184 ) => a.cmp(b),
185 (IoError::UnsupportedFormat(a), IoError::UnsupportedFormat(b)) => a.cmp(b),
186 (IoError::ConversionError(a), IoError::ConversionError(b)) => a.cmp(b),
187 (IoError::FileNotFound(a), IoError::FileNotFound(b)) => a.cmp(b),
188 (IoError::NotFound(a), IoError::NotFound(b)) => a.cmp(b),
189 (IoError::ParseError(a), IoError::ParseError(b)) => a.cmp(b),
190 (IoError::Io(a), IoError::Io(b)) => {
191 match (a.kind() as u8).cmp(&(b.kind() as u8)) {
193 Ordering::Equal => a.to_string().cmp(&b.to_string()),
194 other => other,
195 }
196 }
197 (IoError::ValidationError(a), IoError::ValidationError(b)) => a.cmp(b),
198 (IoError::ChecksumError(a), IoError::ChecksumError(b)) => a.cmp(b),
199 (IoError::IntegrityError(a), IoError::IntegrityError(b)) => a.cmp(b),
200 (IoError::ConfigError(a), IoError::ConfigError(b)) => a.cmp(b),
201 (IoError::NetworkError(a), IoError::NetworkError(b)) => a.cmp(b),
202 (IoError::ParquetError(a), IoError::ParquetError(b)) => a.cmp(b),
203 (IoError::DatabaseError(a), IoError::DatabaseError(b)) => a.cmp(b),
204 (IoError::TimeoutError(a), IoError::TimeoutError(b)) => a.cmp(b),
205 (IoError::Other(a), IoError::Other(b)) => a.cmp(b),
206
207 (IoError::FileError(_), _) => Ordering::Less,
209 (_, IoError::FileError(_)) => Ordering::Greater,
210 (IoError::FormatError(_), _) => Ordering::Less,
211 (_, IoError::FormatError(_)) => Ordering::Greater,
212 (IoError::SerializationError(_), _) => Ordering::Less,
213 (_, IoError::SerializationError(_)) => Ordering::Greater,
214 (IoError::DeserializationError(_), _) => Ordering::Less,
215 (_, IoError::DeserializationError(_)) => Ordering::Greater,
216 (IoError::CompressionError(_), _) => Ordering::Less,
217 (_, IoError::CompressionError(_)) => Ordering::Greater,
218 (IoError::DecompressionError(_), _) => Ordering::Less,
219 (_, IoError::DecompressionError(_)) => Ordering::Greater,
220 (IoError::UnsupportedCompressionAlgorithm(_), _) => Ordering::Less,
221 (_, IoError::UnsupportedCompressionAlgorithm(_)) => Ordering::Greater,
222 (IoError::UnsupportedFormat(_), _) => Ordering::Less,
223 (_, IoError::UnsupportedFormat(_)) => Ordering::Greater,
224 (IoError::ConversionError(_), _) => Ordering::Less,
225 (_, IoError::ConversionError(_)) => Ordering::Greater,
226 (IoError::FileNotFound(_), _) => Ordering::Less,
227 (_, IoError::FileNotFound(_)) => Ordering::Greater,
228 (IoError::NotFound(_), _) => Ordering::Less,
229 (_, IoError::NotFound(_)) => Ordering::Greater,
230 (IoError::ParseError(_), _) => Ordering::Less,
231 (_, IoError::ParseError(_)) => Ordering::Greater,
232 (IoError::Io(_), _) => Ordering::Less,
233 (_, IoError::Io(_)) => Ordering::Greater,
234 (IoError::ValidationError(_), _) => Ordering::Less,
235 (_, IoError::ValidationError(_)) => Ordering::Greater,
236 (IoError::ChecksumError(_), _) => Ordering::Less,
237 (_, IoError::ChecksumError(_)) => Ordering::Greater,
238 (IoError::IntegrityError(_), _) => Ordering::Less,
239 (_, IoError::IntegrityError(_)) => Ordering::Greater,
240 (IoError::ConfigError(_), _) => Ordering::Less,
241 (_, IoError::ConfigError(_)) => Ordering::Greater,
242 (IoError::NetworkError(_), _) => Ordering::Less,
243 (_, IoError::NetworkError(_)) => Ordering::Greater,
244 (IoError::ParquetError(_), _) => Ordering::Less,
245 (_, IoError::ParquetError(_)) => Ordering::Greater,
246 (IoError::DatabaseError(_), _) => Ordering::Less,
247 (_, IoError::DatabaseError(_)) => Ordering::Greater,
248 (IoError::TimeoutError(_), _) => Ordering::Less,
249 (_, IoError::TimeoutError(_)) => Ordering::Greater,
250 }
252 }
253}
254
255pub type Result<T> = std::result::Result<T, IoError>;