csv_scout/
error.rs

1/*!
2Error types and conversions for the `csv-sniffer` crate.
3*/
4use std::error::Error;
5use std::fmt;
6use std::io;
7
8/// An error that occurs while examining a CSV data file.
9#[derive(Debug)]
10pub enum SnifferError {
11    /// An I/O error
12    Io(io::Error),
13    /// A CSV parsing error (from the csv crate)
14    Csv(csv::Error),
15    /// A CSV sniffing error
16    SniffingFailed(String),
17}
18
19/// Ease-of-use `Result` type with a `SnifferError`.
20pub type Result<T> = ::std::result::Result<T, SnifferError>;
21
22impl fmt::Display for SnifferError {
23    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
24        match *self {
25            SnifferError::Io(ref err) => write!(f, "IO error: {err}"),
26            SnifferError::Csv(ref err) => write!(f, "{err}"),
27            SnifferError::SniffingFailed(ref s) => write!(f, "Sniffing failed: {s}"),
28        }
29    }
30}
31
32impl Error for SnifferError {
33    fn cause(&self) -> Option<&dyn Error> {
34        match *self {
35            SnifferError::Io(ref err) => Some(err),
36            SnifferError::Csv(ref err) => Some(err),
37            SnifferError::SniffingFailed(_) => None,
38        }
39    }
40}
41
42impl From<io::Error> for SnifferError {
43    fn from(err: io::Error) -> SnifferError {
44        SnifferError::Io(err)
45    }
46}
47impl From<csv::Error> for SnifferError {
48    fn from(err: csv::Error) -> SnifferError {
49        SnifferError::Csv(err)
50    }
51}