Skip to main content

Crate smsru

Crate smsru 

Source
Expand description

Typed Rust client for the SMS.RU HTTP API.

The design follows SPEC.md: a domain layer of strong types, a transport layer for wire-format quirks, and a small client layer orchestrating requests.

use smsru::{
    Auth, CheckStatus, CheckCost, CheckCostOptions, MessageText, RawPhoneNumber, SendOptions,
    SendSms, SmsId, SmsRuClient,
};

#[tokio::main]
async fn main() -> Result<(), smsru::SmsRuError> {
    let client = SmsRuClient::new(Auth::api_id("...")?);

    let phone = RawPhoneNumber::new("+79251234567")?;
    let msg = MessageText::new("hello")?;
    let request = SendSms::to_many(vec![phone], msg, SendOptions::default())?;
    let _resp = client.send_sms(request).await?;

    let status_req = CheckStatus::one(SmsId::new("000000-000001")?);
    let _status = client.check_status(status_req).await?;

    let cost_req = CheckCost::to_many(
        vec![RawPhoneNumber::new("+79251234567")?],
        MessageText::new("hello")?,
        CheckCostOptions::default(),
    )?;
    let _cost = client.check_cost(cost_req).await?;
    Ok(())
}

Re-exports§

pub use client::Auth;
pub use client::SmsRuClient;
pub use client::SmsRuClientBuilder;
pub use client::SmsRuError;
pub use domain::AddCallback;
pub use domain::AddStoplistEntry;
pub use domain::ApiId;
pub use domain::BalanceResponse;
pub use domain::CallCheckId;
pub use domain::CallCheckStatusCode;
pub use domain::CallbackUrl;
pub use domain::CallbacksResponse;
pub use domain::CheckCallAuthStatus;
pub use domain::CheckCallAuthStatusOptions;
pub use domain::CheckCallAuthStatusResponse;
pub use domain::CheckCost;
pub use domain::CheckCostOptions;
pub use domain::CheckCostResponse;
pub use domain::CheckStatus;
pub use domain::CheckStatusResponse;
pub use domain::FreeUsageResponse;
pub use domain::JsonMode;
pub use domain::KnownCallCheckStatusCode;
pub use domain::KnownStatusCode;
pub use domain::LimitUsageResponse;
pub use domain::Login;
pub use domain::MessageText;
pub use domain::PartnerId;
pub use domain::Password;
pub use domain::PhoneNumber;
pub use domain::RawPhoneNumber;
pub use domain::RemoveCallback;
pub use domain::RemoveStoplistEntry;
pub use domain::SendOptions;
pub use domain::SendSms;
pub use domain::SendSmsResponse;
pub use domain::SenderId;
pub use domain::SendersResponse;
pub use domain::SmsCostResult;
pub use domain::SmsId;
pub use domain::SmsResult;
pub use domain::SmsStatusResult;
pub use domain::StartCallAuth;
pub use domain::StartCallAuthOptions;
pub use domain::StartCallAuthResponse;
pub use domain::Status;
pub use domain::StatusCode;
pub use domain::StatusOnlyResponse;
pub use domain::StoplistResponse;
pub use domain::StoplistText;
pub use domain::TtlMinutes;
pub use domain::UnixTimestamp;
pub use domain::ValidationError;

Modules§

client
Client layer: orchestrates transport calls and maps transport ↔ domain.
domain
Domain layer: strong types with validation and invariants (no I/O).