1use std::fmt::Display;
5
6#[derive(Debug, Copy, Clone)]
7pub enum CSVErrorType {
8 IOError,
9 MissingHeaderError,
10 HeaderDataMismatchError,
11 DuplicateKeyInHeaderError,
12}
13
14#[derive(Debug, Clone)]
15pub struct CSVError {
16 error_type: CSVErrorType,
17 error: String,
18}
19
20impl Display for CSVError {
21 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
22 f.write_fmt(format_args!("{:?}: {}", self.error_type, self.error))
23 }
24}
25
26impl std::error::Error for CSVError {}
27
28impl CSVError {
29 #[must_use]
30 pub fn new(error_type: CSVErrorType, error: String) -> CSVError {
31 CSVError { error_type, error }
32 }
33 pub fn err<T>(error_type: CSVErrorType, error: String) -> Result<T, CSVError> {
34 Err(Self::new(error_type, error))
35 }
36}
37
38impl From<std::io::Error> for CSVError {
39 fn from(value: std::io::Error) -> Self {
40 CSVError::new(CSVErrorType::IOError, format!("{value:?}"))
41 }
42}