ytr/
error.rs

1/// `Result` alias with [`ytr::Error`] as the `Err` variant.
2///
3/// [`ytr::Error`]: enum.Error.html
4pub type Result<T> = ::std::result::Result<T, Error>;
5
6
7
8/// Possible types of errors.
9#[derive(Debug)]
10pub enum Error {
11
12    /// Request succeeded, but API returned an error code.
13    ApiError(ApiError),
14
15    /// Request succeeded, but the response could not be parsed.
16    UnexpectedResponse,
17
18    /// Could not connect to server.
19    RequestFailed,
20}
21
22
23
24/// API returned error.
25#[derive(Deserialize, Debug)]
26pub struct ApiError {
27
28    /// Error code.
29    pub code: u16,
30
31    /// Error message.
32    pub message: String,
33}
34
35
36
37
38#[cfg(test)]
39mod tests {
40    extern crate serde_json;
41
42    use super::*;
43
44    #[test]
45    fn deserialize_error_response() {
46        let json = r#"{
47                       "code": 401,
48                       "message": "API key is invalid"
49                      }"#;
50        let parsed: ApiError = serde_json::from_str(json).unwrap();
51        assert_eq!(401, parsed.code);
52        assert_eq!("API key is invalid", parsed.message);
53    }
54}