Skip to main content

rusty_cdk_core/sns/
dto.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3use crate::{dto_methods, ref_struct_with_id_methods};
4use crate::iam::PolicyDocument;
5use crate::shared::Id;
6
7#[derive(Debug, Serialize, Deserialize)]
8pub(crate) enum TopicType {
9    #[serde(rename = "AWS::SNS::Topic")]
10    TopicType
11}
12
13ref_struct_with_id_methods!(TopicRef);
14
15#[derive(Debug, Serialize, Deserialize)]
16pub struct Topic {
17    #[serde(skip)]
18    pub(super) id: Id,
19    #[serde(skip)]
20    pub(super) resource_id: String,
21    #[serde(rename = "Type")]
22    pub(super) r#type: TopicType,
23    #[serde(rename = "Properties")]
24    pub(crate) properties: TopicProperties,
25}
26dto_methods!(Topic);
27
28#[derive(Debug, Serialize, Deserialize)]
29pub struct TopicProperties {
30    #[serde(rename = "ArchivePolicy", skip_serializing_if = "Option::is_none")]
31    pub(crate) archive_policy: Option<Value>,
32    #[serde(rename = "ContentBasedDeduplication", skip_serializing_if = "Option::is_none")]
33    pub(super) content_based_deduplication: Option<bool>,
34    #[serde(rename = "DeliveryStatusLogging", skip_serializing_if = "Option::is_none")]
35    pub(super) delivery_status_logging: Option<LoggingConfig>,
36    #[serde(rename = "DisplayName", skip_serializing_if = "Option::is_none")]
37    pub(super) display_name: Option<String>,
38    #[serde(rename = "FifoTopic", skip_serializing_if = "Option::is_none")]
39    pub(super) fifo_topic: Option<bool>,
40    #[serde(rename = "FifoThroughputScope", skip_serializing_if = "Option::is_none")]
41    pub(super) fifo_throughput_scope: Option<String>,
42    #[serde(rename = "KmsMasterKeyId", skip_serializing_if = "Option::is_none")]
43    pub(super) kms_master_key_id: Option<Value>,
44    #[serde(rename = "TopicName", skip_serializing_if = "Option::is_none")]
45    pub(super) topic_name: Option<String>,
46    #[serde(rename = "TracingConfig", skip_serializing_if = "Option::is_none")]
47    pub(super) tracing_config: Option<String>,
48    // DataProtectionPolicy
49}
50
51ref_struct_with_id_methods!(TopicPolicyRef);
52
53#[derive(Debug, Serialize, Deserialize)]
54pub struct LoggingConfig {
55    #[serde(rename = "FailureFeedbackRoleArn", skip_serializing_if = "Option::is_none")]
56    pub(super) failure_feedback_role_arn: Option<Value>,
57    #[serde(rename = "Protocol")]
58    pub(super) protocol: String,
59    #[serde(rename = "SuccessFeedbackRoleArn", skip_serializing_if = "Option::is_none")]
60    pub(super) success_feedback_role_arn: Option<Value>,
61    #[serde(rename = "SuccessFeedbackSampleRate", skip_serializing_if = "Option::is_none")]
62    pub(super) success_feedback_sample_rate: Option<u8>,
63}
64
65#[derive(Debug, Serialize, Deserialize)]
66pub(crate) enum TopicPolicyType {
67    #[serde(rename = "AWS::SNS::TopicPolicy")]
68    TopicPolicyType
69}
70
71#[derive(Debug, Serialize, Deserialize)]
72pub struct TopicPolicy {
73    #[serde(skip)]
74    pub(super) id: Id,
75    #[serde(skip)]
76    pub(super) resource_id: String,
77    #[serde(rename = "Type")]
78    pub(super) r#type: TopicPolicyType,
79    #[serde(rename = "Properties")]
80    pub(crate) properties: TopicPolicyProperties,
81}
82dto_methods!(TopicPolicy);
83
84#[derive(Debug, Serialize, Deserialize)]
85pub struct TopicPolicyProperties {
86    #[serde(rename = "PolicyDocument")]
87    pub(crate) doc: PolicyDocument,
88    #[serde(rename = "Topics")]
89    pub(super) topics: Vec<Value>,
90}
91
92#[derive(Debug, Serialize, Deserialize)]
93pub(crate) enum SubscriptionDtoType {
94    #[serde(rename = "AWS::SNS::Subscription")]
95    SubscriptionType
96}
97
98#[derive(Debug, Serialize, Deserialize)]
99pub struct Subscription {
100    #[serde(skip)]
101    pub(super) id: Id,
102    #[serde(skip)]
103    pub(super) resource_id: String,
104    #[serde(rename = "Type")]
105    pub(super) r#type: SubscriptionDtoType,
106    #[serde(rename = "Properties")]
107    pub(super) properties: SnsSubscriptionProperties,
108}
109dto_methods!(Subscription);
110
111#[derive(Debug, Serialize, Deserialize)]
112pub struct SnsSubscriptionProperties {
113    #[serde(rename = "Endpoint")]
114    pub(super) endpoint: Value,
115    #[serde(rename = "Protocol")]
116    pub(super) protocol: String,
117    #[serde(rename = "TopicArn")]
118    pub(super) topic_arn: Value
119}