Skip to main content

smsru/
lib.rs

1//! Typed Rust client for the SMS.RU HTTP API.
2//!
3//! This crate is implemented in milestones (see `PLANS.md`). The public API is
4//! still evolving, but the design follows `SPEC.md`: a domain layer of strong
5//! types, a transport layer for wire-format quirks, and a small client layer
6//! orchestrating requests.
7//!
8//! ```rust,no_run
9//! use smsru::{
10//!     Auth, CheckStatus, MessageText, RawPhoneNumber, SendOptions, SendSms, SmsId, SmsRuClient,
11//! };
12//!
13//! #[tokio::main]
14//! async fn main() -> Result<(), smsru::SmsRuError> {
15//!     let client = SmsRuClient::new(Auth::api_id("...")?);
16//!
17//!     let phone = RawPhoneNumber::new("+79251234567")?;
18//!     let msg = MessageText::new("hello")?;
19//!     let request = SendSms::to_many(vec![phone], msg, SendOptions::default())?;
20//!     let _resp = client.send_sms(request).await?;
21//!
22//!     let status_req = CheckStatus::one(SmsId::new("000000-000001")?);
23//!     let _status = client.check_status(status_req).await?;
24//!     Ok(())
25//! }
26//! ```
27#![forbid(unsafe_code)]
28
29pub mod client;
30pub mod domain;
31mod transport;
32
33pub use client::{Auth, SmsRuClient, SmsRuClientBuilder, SmsRuError};
34pub use domain::{
35    ApiId, CheckStatus, CheckStatusResponse, JsonMode, KnownStatusCode, Login, MessageText,
36    PartnerId, Password, PhoneNumber, RawPhoneNumber, SendOptions, SendSms, SendSmsResponse,
37    SenderId, SmsId, SmsResult, SmsStatusResult, Status, StatusCode, TtlMinutes, UnixTimestamp,
38    ValidationError,
39};