azure_functions/send_grid/
tracking_settings.rs

1use crate::send_grid::{ClickTracking, GoogleAnalytics, OpenTracking, SubscriptionTracking};
2use serde::{Deserialize, Serialize};
3
4/// Represents a collection of different mail settings that specify how an email message is handled.
5#[derive(Debug, Default, Clone, Serialize, Deserialize)]
6pub struct TrackingSettings {
7    /// The click tracking settings for the email message.
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub click_tracking: Option<ClickTracking>,
10    /// The open tracking settings for the email message.
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub open_tracking: Option<OpenTracking>,
13    /// The subscription tracking settings for the email message.
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub subscription_tracking: Option<SubscriptionTracking>,
16    /// The Google Analytics settings for the email message.
17    #[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}