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};