linode_api/endpoints/v4/
error.rs

1use serde::{Deserialize, Serialize};
2
3use crate::objects::v4::Error;
4
5//
6#[derive(Deserialize, Serialize, Debug, Clone)]
7pub struct ErrorResponseBody {
8    pub errors: Vec<Error>,
9}
10
11#[cfg(test)]
12mod tests {
13    use super::*;
14
15    use crate::objects::v4::ErrorReason;
16
17    #[test]
18    fn test_de_response_body() {
19        match serde_json::from_str::<ErrorResponseBody>(include_str!(
20            "../../../tests/response_body_files/error/error__with_invalid_json.json"
21        )) {
22            Ok(json) => {
23                assert_eq!(json.errors.len(), 1);
24                assert!(json.errors[0].field.is_none());
25                assert_eq!(json.errors[0].reason, ErrorReason::InvalidJson);
26            }
27            x => panic!("{x:?}"),
28        }
29
30        match serde_json::from_str::<ErrorResponseBody>(include_str!(
31            "../../../tests/response_body_files/error/error__with_invalid_token.json"
32        )) {
33            Ok(json) => {
34                assert_eq!(json.errors.len(), 1);
35                assert!(json.errors[0].field.is_none());
36                assert_eq!(json.errors[0].reason, ErrorReason::InvalidToken);
37            }
38            x => panic!("{x:?}"),
39        }
40
41        match serde_json::from_str::<ErrorResponseBody>(include_str!(
42            "../../../tests/response_body_files/error/error__with_not_found.json"
43        )) {
44            Ok(json) => {
45                assert_eq!(json.errors.len(), 1);
46                assert!(json.errors[0].field.is_none());
47                assert_eq!(json.errors[0].reason, ErrorReason::NotFound);
48            }
49            x => panic!("{x:?}"),
50        }
51
52        match serde_json::from_str::<ErrorResponseBody>(include_str!(
53            "../../../tests/response_body_files/error/error__with_page_size_invalid.json"
54        )) {
55            Ok(json) => {
56                assert_eq!(json.errors.len(), 1);
57                assert_eq!(json.errors[0].field, Some("page_size".into()));
58                assert_eq!(
59                    json.errors[0].reason,
60                    ErrorReason::Other("Must be 25-500".into())
61                );
62            }
63            x => panic!("{x:?}"),
64        }
65    }
66}