irox_csv/
error.rs

1// SPDX-License-Identifier: MIT
2// Copyright 2023 IROX Contributors
3
4use 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}