Skip to main content

usesend_api/types/
campaign.rs

1use serde::{Deserialize, Serialize};
2
3use super::{CampaignId, ContactBookId, StringOrVec};
4
5// --- Enums ---
6
7#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
8#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
9pub enum CampaignStatus {
10    Draft,
11    Scheduled,
12    InProgress,
13    Paused,
14    Completed,
15    Cancelled,
16}
17
18// --- Types ---
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
21#[serde(rename_all = "camelCase")]
22pub struct Campaign {
23    pub id: CampaignId,
24    pub name: String,
25    pub from: String,
26    pub subject: String,
27    pub status: CampaignStatus,
28    pub created_at: String,
29    pub updated_at: String,
30    pub scheduled_at: Option<String>,
31    pub preview_text: Option<String>,
32    pub contact_book_id: Option<ContactBookId>,
33    pub html: Option<String>,
34    pub content: Option<String>,
35    pub batch_size: i64,
36    pub batch_window_minutes: i64,
37    pub total: i64,
38    pub sent: i64,
39    pub delivered: i64,
40    pub opened: i64,
41    pub clicked: i64,
42    pub unsubscribed: i64,
43    pub bounced: i64,
44    pub hard_bounced: i64,
45    pub complained: i64,
46    pub reply_to: Vec<String>,
47    pub cc: Vec<String>,
48    pub bcc: Vec<String>,
49}
50
51// --- Requests ---
52
53#[derive(Debug, Clone, Serialize, Deserialize)]
54#[serde(rename_all = "camelCase")]
55pub struct CreateCampaignRequest {
56    pub name: String,
57    pub from: String,
58    pub subject: String,
59    pub contact_book_id: String,
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub content: Option<String>,
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub html: Option<String>,
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub preview_text: Option<String>,
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub reply_to: Option<StringOrVec>,
68    #[serde(skip_serializing_if = "Option::is_none")]
69    pub cc: Option<StringOrVec>,
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub bcc: Option<StringOrVec>,
72    #[serde(skip_serializing_if = "Option::is_none")]
73    pub send_now: Option<bool>,
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub scheduled_at: Option<String>,
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub batch_size: Option<i64>,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
81#[serde(rename_all = "camelCase")]
82pub struct ScheduleCampaignRequest {
83    #[serde(skip_serializing_if = "Option::is_none")]
84    pub scheduled_at: Option<String>,
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub batch_size: Option<i64>,
87}
88
89#[derive(Debug, Clone, Default, Serialize, Deserialize)]
90#[serde(rename_all = "camelCase")]
91pub struct ListCampaignsParams {
92    #[serde(skip_serializing_if = "Option::is_none")]
93    pub page: Option<String>,
94    #[serde(skip_serializing_if = "Option::is_none")]
95    pub status: Option<CampaignStatus>,
96    #[serde(skip_serializing_if = "Option::is_none")]
97    pub search: Option<String>,
98}