uni-sdk 0.3.0

The official Unimatrix SDK for Rust
Documentation
use serde::Serialize;

use crate::{
    SendMessageData, SendMessageRequest, SendOtpRequest, UniClient, UniMessage, UniResponse,
    VerifyOtpData, VerifyOtpRequest,
};

#[derive(Clone, Copy)]
/// Asynchronous SMS message operations.
pub struct MessageService<'a> {
    client: &'a UniClient,
}

impl<'a> MessageService<'a> {
    pub(crate) fn new(client: &'a UniClient) -> Self {
        Self { client }
    }

    /// Sends an SMS message.
    pub async fn send(
        &self,
        params: &SendMessageRequest,
    ) -> crate::Result<UniResponse<SendMessageData>> {
        self.client.request("sms.message.send", params).await
    }

    /// Sends a custom serializable payload and returns custom response data.
    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)]
/// Asynchronous one-time passcode operations.
pub struct OtpService<'a> {
    client: &'a UniClient,
}

impl<'a> OtpService<'a> {
    pub(crate) fn new(client: &'a UniClient) -> Self {
        Self { client }
    }

    /// Sends a one-time passcode.
    pub async fn send(&self, params: &SendOtpRequest) -> crate::Result<UniResponse<UniMessage>> {
        self.client.request("otp.send", params).await
    }

    /// Verifies a one-time passcode.
    pub async fn verify(
        &self,
        params: &VerifyOtpRequest,
    ) -> crate::Result<UniResponse<VerifyOtpData>> {
        self.client.request("otp.verify", params).await
    }
}