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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
use crate::one_api::send_messages::GatewayError;
use serde::Deserialize;
#[derive(Deserialize, Clone, Debug, PartialEq)]
pub struct MessageResponse {
#[serde(rename = "apiMessageId")]
api_message_id: Option<String>,
accepted: bool,
pub to: String,
pub error: Option<GatewayError>,
}
impl MessageResponse {
pub fn message_id(&self) -> String {
match &self.api_message_id {
Some(message_id) => message_id.clone(),
None => String::from(""),
}
}
pub fn is_error(&self) -> bool {
self.error.is_some()
}
}
#[test]
fn test_deserialize() {
use crate::one_api::send_messages;
let succcess_202 = r#"{
"messages": [
{
"apiMessageId": "02ca87d5a95446e68b0ac36a0c2057f1",
"accepted": true,
"to": "2799900001"
},
{
"apiMessageId": "b71d513be46f4b29b16c2f354c7eef07",
"accepted": true,
"to": "2799900002"
}
],
"error": null
}"#;
let send_messages_response: send_messages::Response = serde_json::from_str(succcess_202).unwrap();
assert_eq!(None, send_messages_response.error);
let messages = send_messages_response.messages();
assert_eq!(2, messages.len());
let success_207 = r#"{
"messages": [
{
"apiMessageId": "cd2d90701afe42cdb15e2670218d8567",
"accepted": true,
"to": "2799900001"
},
{
"error": {
"code": 23,
"description": "Invalid or missing parameter: to ."
},
"accepted": false,
"to": "27999abcde"
}
],
"error": null
}"#;
let send_message_response: send_messages::Response = serde_json::from_str(success_207).unwrap();
assert_eq!(None, send_message_response.error);
let messages = send_message_response.messages();
assert_eq!(2, messages.len());
let error_message = messages[1].clone();
let error = error_message.error.unwrap();
assert_eq!(
send_messages::GatewayErrorCode::InvalidOrMissingParameter,
error.code
);
let error_400 = r#"{
"messages": [
{
"error": {
"code": 23,
"description": "Invalid or missing parameter: to ."
},
"accepted": false,
"to": "27999abcde"
}
],
"error": null
}"#;
let send_message_response: send_messages::Response = serde_json::from_str(error_400).unwrap();
assert_eq!(None, send_message_response.error);
let messages = send_message_response.messages();
assert_eq!(1, messages.len());
let error_message = messages[0].clone();
let error = error_message.error.unwrap();
assert_eq!(
send_messages::GatewayErrorCode::InvalidOrMissingParameter,
error.code
);
let error_401 = r#"{
"error": {
"code": 1,
"description": "Invalid or missing integration API Key"
}
}"#;
let send_message_response: send_messages::Response = serde_json::from_str(error_401).unwrap();
assert!(send_message_response.messages().is_empty());
let error = send_message_response.error.unwrap();
assert_eq!(
send_messages::GatewayErrorCode::InvalidOrMissingIntegrationAPIKey,
error.code
)
}