rusty_cdk_core/sns/
dto.rs

1use serde::Serialize;
2use serde_json::Value;
3use crate::{dto_methods, ref_struct};
4use crate::iam::PolicyDocument;
5use crate::intrinsic::{get_arn, get_att, get_ref};
6use crate::shared::Id;
7
8ref_struct!(TopicRef);
9
10#[derive(Debug, Serialize)]
11pub struct Topic {
12    #[serde(skip)]
13    pub(super) id: Id,
14    #[serde(skip)]
15    pub(super) resource_id: String,
16    #[serde(rename = "Type")]
17    pub(super) r#type: String,
18    #[serde(rename = "Properties")]
19    pub(super) properties: TopicProperties,
20}
21dto_methods!(Topic);
22
23#[derive(Debug, Serialize)]
24pub struct TopicProperties {
25    #[serde(rename = "TopicName", skip_serializing_if = "Option::is_none")]
26    pub(super) topic_name: Option<String>,
27    #[serde(rename = "FifoTopic", skip_serializing_if = "Option::is_none")]
28    pub(super) fifo_topic: Option<bool>,
29    #[serde(rename = "ContentBasedDeduplication", skip_serializing_if = "Option::is_none")]
30    pub(super) content_based_deduplication: Option<bool>,
31    #[serde(rename = "FifoThroughputScope", skip_serializing_if = "Option::is_none")]
32    pub(super) fifo_throughput_scope: Option<String>,
33}
34
35pub struct TopicPolicyRef {
36    id: Id,
37    resource_id: String,
38}
39
40impl TopicPolicyRef {
41    pub fn new(id: Id, resource_id: String) -> Self {
42        Self {
43            id,
44            resource_id
45        }
46    }
47
48    pub fn get_id(&self) -> Id {
49        self.id.clone()
50    }
51
52    pub fn get_resource_id(&self) -> &str {
53        self.resource_id.as_str()
54    }
55
56    pub fn get_ref(&self) -> Value {
57        get_ref(self.get_resource_id())
58    }
59
60    pub fn get_arn(&self) -> Value {
61        get_arn(self.get_resource_id())
62    }
63
64    pub fn get_att(&self, id: &str) -> Value {
65        get_att(self.get_resource_id(), id)
66    }
67}
68
69#[derive(Debug, Serialize)]
70pub struct TopicPolicy {
71    #[serde(skip)]
72    pub(super) id: Id,
73    #[serde(skip)]
74    pub(super) resource_id: String,
75    #[serde(rename = "Type")]
76    pub(super) r#type: String,
77    #[serde(rename = "Properties")]
78    pub(super) properties: TopicPolicyProperties,
79}
80dto_methods!(TopicPolicy);
81
82#[derive(Debug, Serialize)]
83pub struct TopicPolicyProperties {
84    #[serde(rename = "PolicyDocument")]
85    pub(super) doc: PolicyDocument,
86    #[serde(rename = "Topics")]
87    pub(super) topics: Vec<Value>,
88}
89
90#[derive(Debug, Serialize)]
91pub struct Subscription {
92    #[serde(skip)]
93    pub(super) id: Id,
94    #[serde(skip)]
95    pub(super) resource_id: String,
96    #[serde(rename = "Type")]
97    pub(super) r#type: String,
98    #[serde(rename = "Properties")]
99    pub(super) properties: SnsSubscriptionProperties,
100}
101dto_methods!(Subscription);
102
103#[derive(Debug, Serialize)]
104pub struct SnsSubscriptionProperties {
105    #[serde(rename = "Protocol")]
106    pub(super) protocol: String,
107    #[serde(rename = "Endpoint")]
108    pub(super) endpoint: Value,
109    #[serde(rename = "TopicArn")]
110    pub(super) topic_arn: Value
111}