Skip to main content

rusty_cdk_core/lambda/
dto.rs

1use crate::{dto_methods, ref_struct, ref_struct_with_id_methods};
2use crate::shared::Id;
3use crate::stack::Asset;
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
6use std::collections::HashMap;
7
8ref_struct_with_id_methods!(FunctionRef);
9
10#[derive(Debug, Serialize, Deserialize)]
11pub struct Function {
12    #[serde(skip)]
13    pub(super) id: Id,
14    #[serde(skip)]
15    pub(super) resource_id: String,
16    #[serde(skip)]
17    pub(crate) asset: Option<Asset>,
18    #[serde(rename = "Type")]
19    pub(super) r#type: String,
20    #[serde(rename = "Properties")]
21    pub(super) properties: LambdaFunctionProperties,
22}
23
24impl Function {
25    pub fn get_id(&self) -> &Id {
26        &self.id
27    }
28
29    pub fn get_resource_id(&self) -> &str {
30        self.resource_id.as_str()
31    }
32}
33
34#[derive(Debug, Serialize, Deserialize)]
35pub struct LambdaFunctionProperties {
36    #[serde(rename = "Code")]
37    pub(super) code: LambdaCode,
38    #[serde(rename = "MemorySize")]
39    pub(super) memory_size: u16,
40    #[serde(rename = "Timeout")]
41    pub(super) timeout: u16,
42    #[serde(rename = "Architectures")]
43    pub(super) architectures: Vec<String>,
44    #[serde(rename = "Role")]
45    pub(super) role: Value,
46    #[serde(rename = "Runtime", skip_serializing_if = "Option::is_none")]
47    pub(super) runtime: Option<String>,
48    #[serde(rename = "Handler", skip_serializing_if = "Option::is_none")]
49    pub(super) handler: Option<String>,
50    #[serde(rename = "FunctionName", skip_serializing_if = "Option::is_none")]
51    pub(super) function_name: Option<String>,
52    #[serde(rename = "Environment", skip_serializing_if = "Option::is_none")]
53    pub(super) environment: Option<Environment>,
54    #[serde(rename = "ReservedConcurrentExecutions", skip_serializing_if = "Option::is_none")]
55    pub(super) reserved_concurrent_executions: Option<u32>,
56    #[serde(rename = "LoggingConfig")]
57    pub(super) logging_info: LoggingInfo, 
58    // package_type: Option<String>,
59    // "VpcConfig": VpcConfig
60}
61
62#[derive(Debug, Serialize, Deserialize)]
63pub struct LambdaCode {
64    #[serde(rename = "S3Bucket", skip_serializing_if = "Option::is_none")]
65    pub(super) s3_bucket: Option<String>,
66    #[serde(rename = "S3Key", skip_serializing_if = "Option::is_none")]
67    pub(super) s3_key: Option<String>,
68    #[serde(rename = "ZipFile", skip_serializing_if = "Option::is_none")]
69    pub(super) zipfile: Option<String>,
70    // s3_object_version: Option<String>,
71    // image_uri: Option<String>,
72    // source_kmskey_arn: String
73}
74
75#[derive(Debug, Serialize, Deserialize)]
76pub struct Environment {
77    #[serde(rename = "Variables")]
78    pub(super) variables: HashMap<String, Value>,
79}
80
81#[derive(Debug, Serialize, Deserialize)]
82pub struct LoggingInfo {
83    #[serde(rename = "LogGroup")]
84    pub(super) log_group: Option<Value>,
85    // "ApplicationLogLevel" : String,
86    // "LogFormat" : String,
87    // "SystemLogLevel" : String
88}
89
90ref_struct!(EventSourceMappingRef);
91
92#[derive(Debug, Serialize, Deserialize)]
93pub struct EventSourceMapping {
94    #[serde(skip)]
95    pub(super) id: Id,
96    #[serde(skip)]
97    pub(super) resource_id: String,
98    #[serde(rename = "Type")]
99    pub(super) r#type: String,
100    #[serde(rename = "Properties")]
101    pub(super) properties: EventSourceProperties,
102}
103dto_methods!(EventSourceMapping);
104
105#[derive(Debug, Serialize, Deserialize)]
106pub struct EventSourceProperties {
107    #[serde(rename = "EventSourceArn", skip_serializing_if = "Option::is_none")]
108    pub(super) event_source_arn: Option<Value>,
109    #[serde(rename = "FunctionName", skip_serializing_if = "Option::is_none")]
110    pub(super) function_name: Option<Value>,
111    #[serde(rename = "ScalingConfig", skip_serializing_if = "Option::is_none")]
112    pub(super) scaling_config: Option<ScalingConfig>,
113}
114
115#[derive(Debug, Serialize, Deserialize)]
116pub struct ScalingConfig {
117    #[serde(rename = "MaximumConcurrency")]
118    pub(super) max_concurrency: u16,
119}
120
121ref_struct_with_id_methods!(PermissionRef);
122
123#[derive(Debug, Serialize, Deserialize)]
124pub struct Permission {
125    #[serde(skip)]
126    pub(super) id: Id,
127    #[serde(skip)]
128    pub(super) resource_id: String,
129    #[serde(rename = "Type")]
130    pub(super) r#type: String,
131    #[serde(rename = "Properties")]
132    pub(super) properties: LambdaPermissionProperties,
133}
134dto_methods!(Permission);
135
136#[derive(Debug, Serialize, Deserialize)]
137pub struct LambdaPermissionProperties {
138    #[serde(rename = "Action")]
139    pub(super) action: String,
140    #[serde(rename = "FunctionName")]
141    pub(super) function_name: Value,
142    #[serde(rename = "Principal")]
143    pub(super) principal: String,
144    #[serde(rename = "SourceArn", skip_serializing_if = "Option::is_none")]
145    pub(super) source_arn: Option<Value>,
146    #[serde(rename = "SourceAccount", skip_serializing_if = "Option::is_none")]
147    pub(super) source_account: Option<Value>,
148}