sendgrid_async/sendgrid/
personalization.rs1use serde::Serialize;
2use std::collections::HashMap;
3
4#[derive(Default, Serialize)]
7pub struct Personalization {
8 to: Vec<super::Address>,
9
10 #[serde(skip_serializing_if = "Option::is_none")]
11 cc: Option<Vec<super::Address>>,
12
13 #[serde(skip_serializing_if = "Option::is_none")]
14 bcc: Option<Vec<super::Address>>,
15
16 #[serde(skip_serializing_if = "Option::is_none")]
17 subject: Option<String>,
18
19 #[serde(skip_serializing_if = "Option::is_none")]
20 headers: Option<HashMap<String, String>>,
21
22 #[serde(skip_serializing_if = "Option::is_none")]
23 substitutions: Option<HashMap<String, String>>,
24
25 #[serde(skip_serializing_if = "Option::is_none")]
26 custom_args: Option<HashMap<String, String>>,
27
28 #[serde(skip_serializing_if = "Option::is_none")]
29 dynamic_template_data: Option<serde_json::Value>,
30
31 #[serde(skip_serializing_if = "Option::is_none")]
32 send_at: Option<u64>,
33}
34
35impl Personalization {
36 pub fn new() -> Personalization {
38 Personalization::default()
39 }
40
41 pub fn add_to(mut self, to: super::Address) -> Personalization {
43 self.to.push(to);
44 self
45 }
46
47 pub fn add_cc(mut self, cc: super::Address) -> Personalization {
49 match self.cc {
50 None => {
51 let mut ccs = Vec::new();
52 ccs.push(cc);
53 self.cc = Some(ccs);
54 }
55 Some(ref mut c) => {
56 c.push(cc);
57 }
58 }
59 self
60 }
61
62 pub fn add_bcc(mut self, bcc: super::Address) -> Personalization {
64 match self.bcc {
65 None => {
66 let mut bccs = Vec::new();
67 bccs.push(bcc);
68 self.bcc = Some(bccs);
69 }
70 Some(ref mut b) => {
71 b.push(bcc);
72 }
73 }
74 self
75 }
76
77 pub fn add_headers(mut self, headers: HashMap<String, String>) -> Personalization {
79 match self.headers {
80 None => {
81 let mut h = HashMap::new();
82 for (name, value) in headers {
83 h.insert(name, value);
84 }
85 self.headers = Some(h);
86 }
87 Some(ref mut h) => {
88 h.extend(headers);
89 }
90 }
91 self
92 }
93
94 pub fn set_dynamic_template_data(
96 mut self,
97 dynamic_template_data: impl Serialize,
98 ) -> Result<Personalization, serde_json::Error> {
99 let value = serde_json::to_value(dynamic_template_data)?;
100 self.dynamic_template_data = Some(value);
101 Ok(self)
102 }
103}