apple_search_ads/objects/
error_response_item.rs1use serde::{Deserialize, Serialize};
4use serde_enum_str::{Deserialize_enum_str, Serialize_enum_str};
5
6#[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}