csv_sniffer/
error.rs

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