termii_rust/async_impl/rest/token/request.rs
1//! Allow business trigger one-time-passwords
2//! across any available messaging channels.
3
4use std::sync::Arc;
5
6use crate::{
7 async_impl::http::client,
8 common::{
9 errors,
10 token::request::{RequestTokenRequest, RequestTokenResponse},
11 },
12};
13
14#[derive(Debug)]
15pub struct RequestToken<'a> {
16 api_key: &'a str,
17 client: Arc<client::HttpClient>,
18}
19
20impl<'a> RequestToken<'a> {
21 pub(crate) fn new(api_key: &'a str, client: Arc<client::HttpClient>) -> RequestToken<'a> {
22 RequestToken { api_key, client }
23 }
24
25 /// Send a one time token request.
26 ///
27 /// ## Examples
28 ///
29 /// ```rust
30 /// use termii_rust::{
31 /// async_impl::rest::termii,
32 /// common::token::{
33 /// RequestTokenChannel, RequestTokenMessageType, RequestTokenPinType, RequestTokenRequest,
34 /// },
35 /// };
36 ///
37 /// let client = termii::Termii::new("Your API key");
38 ///
39 /// let otp_request = RequestTokenRequest::new(
40 /// RequestTokenMessageType::ALPHANUMERIC,
41 /// String::from("234XXXXXXXXXX"),
42 /// String::from("Your org sender ID"),
43 /// RequestTokenChannel::Generic,
44 /// 3 as u8,
45 /// 50 as usize,
46 /// 6 as u8,
47 /// String::from("< 1234 >"),
48 /// String::from("Your pin is < 1234 >"),
49 /// RequestTokenPinType::ALPHANUMERIC,
50 /// );
51 ///
52 /// let response = client.token.request.send(otp_request).await.unwrap();
53 ///
54 /// println!("{:#?}", response);
55 /// ```
56 pub async fn send(
57 &self,
58 mut otp_payload: RequestTokenRequest,
59 ) -> Result<RequestTokenResponse, errors::HttpError> {
60 otp_payload.set_api_key(self.api_key);
61
62 let response = self
63 .client
64 .post("sms/otp/send", None, None, Some(otp_payload))
65 .await?;
66
67 let otp_response = response_or_error_text_async!(response, RequestTokenResponse);
68
69 Ok(otp_response)
70 }
71}