termii_rust/blocking/rest/switch/
messaging.rs

1//! Send messages to customers across termii channels.
2
3use std::rc::Rc;
4
5use crate::{
6    blocking::http::client,
7    common::{
8        errors,
9        switch::messaging::{
10            MessageBulkRequest, MessageBulkResponse, MessageRequest, MessageResponse,
11        },
12    },
13};
14
15#[derive(Debug)]
16pub struct Messaging<'a> {
17    api_key: &'a str,
18    client: Rc<client::HttpClient>,
19}
20
21impl<'a> Messaging<'a> {
22    pub(crate) fn new(api_key: &'a str, client: Rc<client::HttpClient>) -> Messaging<'a> {
23        Messaging { api_key, client }
24    }
25
26    /// Send a message to a recipient.
27    ///
28    /// ## Examples
29    ///
30    /// ```rust
31    /// use termii_rust::{
32    ///     blocking::rest::termii,
33    ///     common::switch::messaging::{Channel, MessageRequest, MessageType},
34    /// };
35    ///
36    /// let client = termii::Termii::new("Your API key");
37    ///
38    /// let message_payload = MessageRequest::new(
39    ///     "234XXXXXXXXXX".to_string(),
40    ///     "Your org sender id".to_string(),
41    ///     "Your message".to_string(),
42    ///     MessageType::Plain,
43    ///     Channel::Generic,
44    /// );
45    ///
46    /// let message_response = client.switch.messaging.send(message_payload).unwrap();
47    ///
48    /// println!("{:?}", message_response);
49    /// ```
50    pub fn send(&self, mut message: MessageRequest) -> Result<MessageResponse, errors::HttpError> {
51        message.set_api_key(self.api_key);
52
53        let response = self.client.post("sms/send", None, None, Some(message))?;
54
55        let message_response = response_or_error_text_blocking!(response, MessageResponse);
56
57        Ok(message_response)
58    }
59
60    /// Send a message to multiple recipients.
61    ///
62    /// ## Examples
63    ///
64    /// ```rust
65    /// use termii_rust::{
66    ///     blocking::rest::termii,
67    ///     common::switch::messaging::{
68    ///         Channel, MessageBulkRequest, MessageBulkResponse, MessageType,
69    ///     },
70    /// };
71    ///
72    /// let client = termii::Termii::new("Your API key");
73    ///
74    /// let message_bulk_payload = MessageBulkRequest::new(
75    ///     vec!["234XXXXXXXXXX".to_string(), "234XXXXXXXXXX".to_string()],
76    ///     "Your org sender id".to_string(),
77    ///     "Your message".to_string(),
78    ///     MessageType::Plain,
79    ///     Channel::Generic,
80    /// );
81    ///
82    /// let message_bulk_response = client
83    ///     .switch
84    ///     .messaging
85    ///     .send_bulk(message_bulk_payload)
86    ///     .unwrap();
87    ///
88    /// println!("{:?}", message_bulk_response);
89    /// ```
90    pub fn send_bulk(
91        &self,
92        mut message: MessageBulkRequest,
93    ) -> Result<MessageBulkResponse, errors::HttpError> {
94        message.set_api_key(self.api_key);
95
96        let response = self
97            .client
98            .post("sms/send/bulk", None, None, Some(message))?;
99
100        let message_response = response_or_error_text_blocking!(response, MessageBulkResponse);
101
102        Ok(message_response)
103    }
104}