sms-core 0.3.0

Common traits and types for the smskit multi-provider SMS abstraction.
Documentation

SMS Core

Core traits and types for the smskit multi-provider SMS abstraction.

This crate provides the fundamental building blocks for SMS operations:

  • [SmsClient] trait for sending SMS messages
  • [InboundWebhook] trait for processing incoming webhooks
  • [SmsRouter] for dispatching sends to named providers
  • [FallbackClient] for try-in-order provider chaining
  • Common types for requests, responses, and errors

Sending a message

use sms_core::{SendRequest, SmsClient};

// Any SMS provider implements SmsClient
let response = client.send(SendRequest {
    to: "+1234567890",
    from: "+0987654321",
    text: "Hello world!"
}).await?;

Owned requests for async contexts

When you need to hold a request across .await points, use [OwnedSendRequest]:

use sms_core::OwnedSendRequest;

let req = OwnedSendRequest::new("+1234567890", "+0987654321", "Hello!");
// Can be moved across .await boundaries freely
let response = client.send(req.as_ref()).await?;

Routing to named providers

use sms_core::SmsRouter;

let router = SmsRouter::new()
    .with("plivo", plivo_client)
    .with("aws-sns", sns_client);

// Dispatch by name — callers don't need provider crate imports
let response = router.send_via("plivo", SendRequest { .. }).await?;

Fallback chaining

use sms_core::FallbackClient;

let client = FallbackClient::new(vec![primary_client, backup_client]);
// Tries each provider in order; returns first success
let response = client.send(SendRequest { .. }).await?;