infobip-sms-sdk 0.1.0

Async Rust SDK for the Infobip SMS API: send messages, manage scheduled bulks, query delivery reports and logs, fetch inbound SMS, and parse webhook payloads.
Documentation
use reqwest::Method;

use crate::api::{decode_response, ErrorKind};
use crate::client::Client;
use crate::error::Error;
use crate::models::preview::{PreviewRequest, PreviewResponse};

impl Client {
    /// Previews how a message would split into SMS parts without
    /// actually sending it.
    ///
    /// Wraps `POST /sms/1/preview`. Useful for checking that a body
    /// will fit in one SMS or for visualizing the result of a
    /// transliteration. Multiple previews may be returned — for
    /// example, an unprocessed preview plus one per requested
    /// transliteration / language.
    ///
    /// # Errors
    ///
    /// On non-2xx responses, returns
    /// [`Error::Exception`] (the v1 endpoint family uses the legacy
    /// `ApiException` schema).
    ///
    /// # Example
    ///
    /// ```no_run
    /// # use infobip_sms::Client;
    /// use infobip_sms::models::preview::PreviewRequest;
    ///
    /// # async fn run(client: Client) -> Result<(), infobip_sms::Error> {
    /// let preview = client
    ///     .preview_message(&PreviewRequest {
    ///         text: "Some text with emoji 🚀".into(),
    ///         ..Default::default()
    ///     })
    ///     .await?;
    /// for p in preview.previews {
    ///     println!("{:?}", p);
    /// }
    /// # Ok(()) }
    /// ```
    pub async fn preview_message(
        &self,
        request: &PreviewRequest,
    ) -> Result<PreviewResponse, Error> {
        let response = self
            .request(Method::POST, "sms/1/preview")?
            .json(request)
            .send()
            .await?;
        decode_response(response, ErrorKind::Legacy).await
    }
}