rusty_cdk_core/shared/
macros.rs

1#[macro_export]
2macro_rules! dto_methods {
3    ($name:ident) => {
4        impl $name {
5            #[allow(dead_code)]
6            pub fn get_id(&self) -> &Id {
7                &self.id
8            }
9        
10            #[allow(dead_code)]
11            pub fn get_resource_id(&self) -> &str {
12                self.resource_id.as_str()
13            }
14        }
15    };
16}
17
18#[macro_export]
19macro_rules! ref_struct {
20    ($name:ident) => {
21        pub struct $name {
22            resource_id: String,
23        }
24        
25        impl $name {
26            #[allow(dead_code)]
27            pub fn new(resource_id: String) -> Self {
28                Self {
29                    resource_id,
30                }
31            }
32        
33            #[allow(dead_code)]
34            pub fn get_resource_id(&self) -> &str {
35                self.resource_id.as_str()
36            }
37        
38            #[allow(dead_code)]
39            pub fn get_ref(&self) -> Value {
40                $crate::intrinsic::get_ref(self.get_resource_id())
41            }
42            
43            #[allow(dead_code)]
44            pub fn get_arn(&self) -> Value {
45                $crate::intrinsic::get_arn(self.get_resource_id())
46            }
47            
48            #[allow(dead_code)]
49            pub fn get_att(&self, id: &str) -> Value {
50                $crate::intrinsic::get_att(self.get_resource_id(), id)
51            }
52        }
53    };
54}
55
56// most of the time, resource id is enough
57// but lambda functions, for example, needs the `id` field for creating some custom ids used by API Gateway and subscriptions
58#[macro_export]
59macro_rules! ref_struct_with_id_methods {
60    ($name:ident) => {
61        pub struct $name {
62            id: Id,
63            resource_id: String,
64        }
65        
66        impl $name {
67            #[allow(dead_code)]
68            pub fn new(id: Id, resource_id: String) -> Self {
69                Self {
70                    id,
71                    resource_id,
72                }
73            }
74
75            #[allow(dead_code)]
76            pub fn get_id(&self) -> &Id {
77                &self.id
78            }
79        
80            #[allow(dead_code)]
81            pub fn get_resource_id(&self) -> &str {
82                self.resource_id.as_str()
83            }
84        
85            #[allow(dead_code)]
86            pub fn get_ref(&self) -> Value {
87                $crate::intrinsic::get_ref(self.get_resource_id())
88            }
89            
90            #[allow(dead_code)]
91            pub fn get_arn(&self) -> Value {
92                $crate::intrinsic::get_arn(self.get_resource_id())
93            }
94            
95            #[allow(dead_code)]
96            pub fn get_att(&self, id: &str) -> Value {
97                $crate::intrinsic::get_att(self.get_resource_id(), id)
98            }
99        }
100    };
101}
102
103#[macro_export]
104macro_rules! type_state {
105    ($state_trait:ident,$($structs:ident,)*) => {
106        pub trait $state_trait {}
107        $(pub struct $structs {})*
108        $(impl $state_trait for $structs {})*
109    };
110}