td_client/
error.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
use std::error::Error;
use std::fmt;

#[derive(Debug)]
pub struct InvalidArgument {
    pub key: String,
    pub value: String,
}

impl fmt::Display for InvalidArgument {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(
            f,
            "Invalid argument. key:{}, value:{}",
            self.key, self.value
        )
    }
}

impl Error for InvalidArgument {
    fn cause(&self) -> Option<&dyn Error> {
        None
    }
}

#[derive(Debug)]
pub enum TreasureDataError {
    JsonDecodeError(::rustc_serialize::json::DecoderError),
    JsonParseError(::rustc_serialize::json::ParserError),
    MsgpackDecodeError(::rmpv::decode::Error),
    MsgpackUnexpectedValueError(::rmpv::Value),
    TimeStampParseError(::chrono::ParseError),
    HttpError(::reqwest::Error),
    ApiError(::reqwest::StatusCode, String),
    InvalidArgumentError(InvalidArgument),
    IoError(::std::io::Error),
}

impl From<::rustc_serialize::json::DecoderError> for TreasureDataError {
    fn from(err: ::rustc_serialize::json::DecoderError) -> TreasureDataError {
        TreasureDataError::JsonDecodeError(err)
    }
}

impl From<::rustc_serialize::json::ParserError> for TreasureDataError {
    fn from(err: ::rustc_serialize::json::ParserError) -> TreasureDataError {
        TreasureDataError::JsonParseError(err)
    }
}

impl From<::rmpv::decode::Error> for TreasureDataError {
    fn from(err: ::rmpv::decode::Error) -> TreasureDataError {
        TreasureDataError::MsgpackDecodeError(err)
    }
}

impl From<::reqwest::Error> for TreasureDataError {
    fn from(err: ::reqwest::Error) -> TreasureDataError {
        TreasureDataError::HttpError(err)
    }
}

impl From<InvalidArgument> for TreasureDataError {
    fn from(err: InvalidArgument) -> TreasureDataError {
        TreasureDataError::InvalidArgumentError(err)
    }
}

impl From<::std::io::Error> for TreasureDataError {
    fn from(err: ::std::io::Error) -> TreasureDataError {
        TreasureDataError::IoError(err)
    }
}

impl From<::chrono::ParseError> for TreasureDataError {
    fn from(err: ::chrono::ParseError) -> TreasureDataError {
        TreasureDataError::TimeStampParseError(err)
    }
}

impl fmt::Display for TreasureDataError {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "{}", self)
    }
}

impl Error for TreasureDataError {
    fn cause(&self) -> Option<&dyn Error> {
        match *self {
            TreasureDataError::JsonDecodeError(ref x) => Some(x),
            TreasureDataError::JsonParseError(ref x) => Some(x),
            TreasureDataError::MsgpackDecodeError(ref x) => Some(x),
            TreasureDataError::MsgpackUnexpectedValueError(..) => None,
            TreasureDataError::TimeStampParseError(ref x) => Some(x),
            TreasureDataError::HttpError(ref x) => Some(x),
            TreasureDataError::ApiError(..) => None,
            TreasureDataError::InvalidArgumentError(ref x) => Some(x),
            TreasureDataError::IoError(ref x) => Some(x),
        }
    }
}