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