Skip to main content

Crate smsru

Crate smsru 

Source
Expand description

Typed Rust client for the SMS.RU HTTP API.

This crate is implemented in milestones (see PLANS.md). The public API is still evolving, but 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, 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?;
    Ok(())
}

Re-exports§

pub use client::Auth;
pub use client::SmsRuClient;
pub use client::SmsRuClientBuilder;
pub use client::SmsRuError;
pub use domain::ApiId;
pub use domain::CheckStatus;
pub use domain::CheckStatusResponse;
pub use domain::JsonMode;
pub use domain::KnownStatusCode;
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::SendOptions;
pub use domain::SendSms;
pub use domain::SendSmsResponse;
pub use domain::SenderId;
pub use domain::SmsId;
pub use domain::SmsResult;
pub use domain::SmsStatusResult;
pub use domain::Status;
pub use domain::StatusCode;
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).