Skip to main content

plexus_comms/activations/sms/
types.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4// Request types
5#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
6pub struct SendSmsParams {
7    pub to: String,
8    pub message: String,
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub from: Option<String>,
11}
12
13#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
14pub struct SendBatchParams {
15    pub messages: Vec<SendSmsParams>,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
19pub struct CheckStatusParams {
20    pub message_id: String,
21}
22
23// Response/Event types
24#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
25#[serde(tag = "type", rename_all = "snake_case")]
26pub enum SendSmsEvent {
27    Queued {
28        message_id: String,
29        to: String,
30    },
31    Sent {
32        message_id: String,
33        to: String,
34        timestamp: i64,
35    },
36    Error {
37        message: String,
38        code: Option<String>,
39    },
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
43#[serde(tag = "type", rename_all = "snake_case")]
44pub enum BatchSendEvent {
45    Progress {
46        sent: usize,
47        total: usize,
48        percentage: f32,
49    },
50    SmsSent {
51        index: usize,
52        message_id: String,
53        to: String,
54    },
55    SmsFailed {
56        index: usize,
57        to: String,
58        error: String,
59    },
60    Complete {
61        total_sent: usize,
62        total_failed: usize,
63    },
64}
65
66#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
67#[serde(tag = "type", rename_all = "snake_case")]
68pub enum DeliveryStatus {
69    Queued,
70    Sent,
71    Delivered,
72    Failed { reason: String },
73    Unknown,
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
77#[serde(tag = "type", rename_all = "snake_case")]
78pub enum StatusEvent {
79    Status {
80        message_id: String,
81        status: DeliveryStatus,
82    },
83    Error {
84        message: String,
85    },
86}