usesend_api/types/
campaign.rs1use serde::{Deserialize, Serialize};
2
3use super::{CampaignId, ContactBookId, StringOrVec};
4
5#[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#[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#[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}