apple_search_ads/objects/
error_response_item.rs

1// https://developer.apple.com/documentation/apple_search_ads/errorresponseitem
2
3use serde::{Deserialize, Serialize};
4use serde_enum_str::{Deserialize_enum_str, Serialize_enum_str};
5
6//
7#[derive(Deserialize, Serialize, Debug, Clone)]
8pub struct ErrorResponseItem {
9    pub field: Box<str>,
10    pub message: Box<str>,
11    #[serde(rename = "messageCode")]
12    pub message_code: ErrorResponseItemMessageCode,
13}
14
15#[derive(Deserialize_enum_str, Serialize_enum_str, Debug, Clone, PartialEq, Eq)]
16pub enum ErrorResponseItemMessageCode {
17    #[serde(rename = "UNAUTHORIZED")]
18    Unauthorized,
19    #[serde(rename = "INVALID_DATE_FORMAT")]
20    InvalidDateFormat,
21    #[serde(other)]
22    Other(Box<str>),
23}
24
25#[cfg(test)]
26mod tests {
27    use super::*;
28
29    use std::error;
30
31    #[test]
32    fn test_de() -> Result<(), Box<dyn error::Error>> {
33        let item: ErrorResponseItem = serde_json::from_str(
34            r#"{
35                "messageCode": "<CODE>",
36                "message": "<MESSAGE>",
37                "field": "<FIELD>"
38            }"#,
39        )?;
40
41        assert_eq!(item.field.as_ref(), "<FIELD>");
42        assert_eq!(item.message.as_ref(), "<MESSAGE>");
43        assert_eq!(
44            item.message_code,
45            ErrorResponseItemMessageCode::Other("<CODE>".into())
46        );
47
48        Ok(())
49    }
50
51    #[test]
52    fn test_de_message_code() -> Result<(), Box<dyn error::Error>> {
53        #[derive(Deserialize)]
54        pub struct Foo {
55            pub message_code: ErrorResponseItemMessageCode,
56        }
57
58        assert_eq!(
59            serde_json::from_str::<Foo>(r#"{"message_code": "UNAUTHORIZED"}"#,)?.message_code,
60            ErrorResponseItemMessageCode::Unauthorized
61        );
62
63        assert_eq!(
64            serde_json::from_str::<Foo>(r#"{"message_code": "INVALID_DATE_FORMAT"}"#,)?
65                .message_code,
66            ErrorResponseItemMessageCode::InvalidDateFormat
67        );
68
69        assert_eq!(
70            serde_json::from_str::<Foo>(r#"{"message_code": "Bar"}"#,)?.message_code,
71            ErrorResponseItemMessageCode::Other("Bar".into())
72        );
73
74        Ok(())
75    }
76}