use serde::Serialize;
use crate::{
SendMessageData, SendMessageRequest, SendOtpRequest, UniClient, UniMessage, UniResponse,
VerifyOtpData, VerifyOtpRequest,
};
#[derive(Clone, Copy)]
pub struct MessageService<'a> {
client: &'a UniClient,
}
impl<'a> MessageService<'a> {
pub(crate) fn new(client: &'a UniClient) -> Self {
Self { client }
}
pub async fn send(
&self,
params: &SendMessageRequest,
) -> crate::Result<UniResponse<SendMessageData>> {
self.client.request("sms.message.send", params).await
}
pub async fn send_with<T, P>(&self, params: &P) -> crate::Result<UniResponse<T>>
where
T: serde::de::DeserializeOwned,
P: Serialize + ?Sized,
{
self.client.request("sms.message.send", params).await
}
}
#[derive(Clone, Copy)]
pub struct OtpService<'a> {
client: &'a UniClient,
}
impl<'a> OtpService<'a> {
pub(crate) fn new(client: &'a UniClient) -> Self {
Self { client }
}
pub async fn send(&self, params: &SendOtpRequest) -> crate::Result<UniResponse<UniMessage>> {
self.client.request("otp.send", params).await
}
pub async fn verify(
&self,
params: &VerifyOtpRequest,
) -> crate::Result<UniResponse<VerifyOtpData>> {
self.client.request("otp.verify", params).await
}
}