messagebird_async/sms/parameter/
send.rs1use super::*;
2
3#[derive(Debug, Serialize, Eq, PartialEq)]
5pub struct SendParameters {
6 #[serde(rename = "originator")]
8 originator: Originator,
9 #[serde(rename = "body")]
10 payload: Payload,
11 #[serde(rename = "recipients")]
13 recipients: Vec<QueryRecipient>,
14 #[serde(rename = "type")]
16 payload_type: Option<PayloadType>,
17 #[serde(flatten)]
18 #[serde(rename = "reference")]
19 reference: Option<String>,
20 #[serde(flatten)]
21 #[serde(rename = "reportUrl")]
22 report_url: Option<CallbackUrl>,
23 #[serde(flatten)]
24 #[serde(rename = "validity")]
25 validity: Option<Duration>,
26 #[serde(flatten)]
27 #[serde(rename = "gateway")]
28 gateway: Option<Gateway>,
29 #[serde(rename = "typeDetails")]
30 details: Vec<TypeDetail>,
31 #[serde(rename = "datacoding")]
32 payload_encoding: Option<PayloadEncoding>,
33 #[serde(rename = "mclass")]
34 class: Option<MessageClass>,
35 #[serde(flatten)]
36 #[serde(rename = "scheduledDatetime")]
37 scheduled_datetime: Option<DateTime>,
38 }
40
41impl Default for SendParameters {
42 fn default() -> Self {
43 Self {
44 payload_type: None,
45 originator: Originator::default(),
46 payload: Payload::Text("This is a default message".to_string()),
47 reference: None,
48 report_url: None,
49 validity: None,
50 gateway: None,
51 details: vec![],
52 payload_encoding: None,
53 class: None,
54 scheduled_datetime: None,
55 recipients: vec![],
56 }
57 }
58}
59
60impl SendParameters {
61 pub fn builder() -> Builder {
62 Builder(SendParameters::default())
63 }
64}
65
66use std::fmt;
67use std::string::String;
68
69impl fmt::Display for SendParameters {
70 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
71 let base = String::from("https://rest.messagebird.com/messages");
72 let query = serde_url_params::to_string(self).unwrap();
73 write!(f, "{}?{}", base, query)
74 }
75}
76
77impl Query for SendParameters {
78 fn uri(&self) -> hyper::Uri {
79 let uri: hyper::Uri = self
80 .to_string()
81 .parse()
82 .expect("Failed to parse send query object to hyper::Uri");
83 uri
84 }
85 fn method(&self) -> hyper::Method {
86 hyper::Method::POST
87 }
88}
89
90pub struct Builder(SendParameters);
91
92impl Builder {
93 pub fn payload(
94 mut self,
95 payload_type: PayloadType,
96 payload: Payload,
97 payload_encoding: PayloadEncoding,
98 ) -> Self {
99 self.0.payload_type = Some(payload_type);
100 self.0.payload_encoding = Some(payload_encoding);
101 self.0.payload = payload;
102 self
103 }
104 pub fn report_url(mut self, report_url: CallbackUrl) -> Self {
105 self.0.report_url = Some(report_url);
106 self
107 }
108 pub fn origin(mut self, originator: Originator) -> Self {
109 self.0.originator = originator;
110 self
111 }
112 pub fn add_recipient(mut self, recipient: QueryRecipient) -> Self {
113 self.0.recipients.push(recipient);
114 self
115 }
116 pub fn build(self) -> SendParameters {
117 self.0
118 }
119}
120
121#[cfg(test)]
122mod tests {
123
124 use super::*;
125 #[test]
126 fn query_send() {
127 let msisdns: Vec<Msisdn> =
128 vec![Msisdn::new(123475).unwrap(), Msisdn::new(12345677).unwrap()];
129 let url_params = SendParameters::builder()
130 .origin(AlphaNumeric::from_str("inbox").unwrap().into())
131 .payload(
132 PayloadType::Sms,
133 Payload::Text("fun".to_string()),
134 PayloadEncoding::Auto,
135 )
136 .add_recipient(msisdns[0].into())
137 .add_recipient(msisdns[1].into())
138 .build();
139 println!("send obj {:?}", url_params);
140 let url_params_str = serde_url_params::to_string(&url_params).unwrap();
141 println!("send params are \"{}\"", url_params_str);
142 assert_eq!(url_params.to_string(), "https://rest.messagebird.com/messages?originator=inbox&body=fun&recipients=123475&recipients=12345677&type=sms&datacoding=auto".to_string());
143 }
144}