1use std::error::Error;
5use std::fmt;
6use std::io;
7
8use csv;
9
10#[derive(Debug)]
12pub enum SnifferError {
13 Io(io::Error),
15 Csv(csv::Error),
17 SniffingFailed(String),
19}
20
21pub 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}