azure_functions/send_grid/
tracking_settings.rs1use crate::send_grid::{ClickTracking, GoogleAnalytics, OpenTracking, SubscriptionTracking};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Default, Clone, Serialize, Deserialize)]
6pub struct TrackingSettings {
7 #[serde(skip_serializing_if = "Option::is_none")]
9 pub click_tracking: Option<ClickTracking>,
10 #[serde(skip_serializing_if = "Option::is_none")]
12 pub open_tracking: Option<OpenTracking>,
13 #[serde(skip_serializing_if = "Option::is_none")]
15 pub subscription_tracking: Option<SubscriptionTracking>,
16 #[serde(rename = "ganalytics", skip_serializing_if = "Option::is_none")]
18 pub google_analytics: Option<GoogleAnalytics>,
19}
20
21#[cfg(test)]
22mod tests {
23 use super::*;
24 use serde_json::to_string;
25
26 #[test]
27 fn it_serializes_to_json() {
28 let json = to_string(&TrackingSettings {
29 click_tracking: Some(ClickTracking {
30 enable: true,
31 enable_text: false,
32 }),
33 open_tracking: Some(OpenTracking {
34 enable: true,
35 substitution_tag: Some("foo".to_owned()),
36 }),
37 subscription_tracking: Some(SubscriptionTracking {
38 enable: true,
39 text: "foo".to_owned(),
40 html: "bar".to_owned(),
41 substitution_tag: Some("baz".to_owned()),
42 }),
43 google_analytics: Some(GoogleAnalytics {
44 enable: true,
45 source: "foo".to_owned(),
46 medium: "bar".to_owned(),
47 term: "baz".to_owned(),
48 content: "jam".to_owned(),
49 campaign: "cake".to_owned(),
50 }),
51 })
52 .unwrap();
53
54 assert_eq!(
55 json,
56 r#"{"click_tracking":{"enable":true,"enable_text":false},"open_tracking":{"enable":true,"substitution_tag":"foo"},"subscription_tracking":{"enable":true,"text":"foo","html":"bar","substitution_tag":"baz"},"ganalytics":{"enable":true,"utm_source":"foo","utm_medium":"bar","utm_term":"baz","utm_content":"jam","utm_campaign":"cake"}}"#
57 );
58 }
59}