rusty_cdk_core/cloudfront/
dto.rs

1use crate::s3::BucketPolicy;
2use crate::shared::Id;
3use serde::Serialize;
4use serde_json::Value;
5use crate::{dto_methods, ref_struct};
6
7ref_struct!(OriginAccessControlRef);
8
9#[derive(Debug, Serialize)]
10pub struct OriginAccessControl {
11    #[serde(skip)]
12    pub(super) id: Id,
13    #[serde(skip)]
14    pub(super) resource_id: String,
15    #[serde(rename = "Type")]
16    pub(super) r#type: String,
17    #[serde(rename = "Properties")]
18    pub(super) properties: OriginControlProperties,
19}
20dto_methods!(OriginAccessControl);
21
22#[derive(Debug, Serialize)]
23pub struct OriginControlProperties {
24    #[serde(rename = "OriginAccessControlConfig")]
25    pub(super) config: OriginAccessControlConfig,
26}
27
28#[derive(Debug, Serialize)]
29pub struct OriginAccessControlConfig {
30    #[serde(rename = "Name")]
31    pub(super) name: String,
32    #[serde(rename = "OriginAccessControlOriginType")]
33    pub(super) origin_access_control_type: String,
34    #[serde(rename = "SigningBehavior")]
35    pub(super) signing_behavior: String,
36    #[serde(rename = "SigningProtocol")]
37    pub(super) signing_protocol: String,
38}
39
40ref_struct!(CachePolicyRef);
41
42#[derive(Debug, Serialize)]
43pub struct CachePolicy {
44    #[serde(skip)]
45    pub(super) id: Id,
46    #[serde(skip)]
47    pub(super) resource_id: String,
48    #[serde(rename = "Type")]
49    pub(super) r#type: String,
50    #[serde(rename = "Properties")]
51    pub(super) properties: CachePolicyProperties,
52}
53dto_methods!(CachePolicy);
54
55#[derive(Debug, Serialize)]
56pub struct CachePolicyProperties {
57    #[serde(rename = "CachePolicyConfig")]
58    pub(super) config: CachePolicyConfig,
59}
60
61#[derive(Debug, Serialize)]
62pub struct CachePolicyConfig {
63    #[serde(rename = "DefaultTTL")]
64    pub(super) default_ttl: u32,
65    #[serde(rename = "MinTTL")]
66    pub(super) min_ttl: u32,
67    #[serde(rename = "MaxTTL")]
68    pub(super) max_ttl: u32,
69    #[serde(rename = "Name")]
70    pub(super) name: String,
71    #[serde(rename = "ParametersInCacheKeyAndForwardedToOrigin")]
72    pub(super) params_in_cache_key_and_forwarded: ParametersInCacheKeyAndForwardedToOrigin,
73}
74
75#[derive(Debug, Serialize)]
76pub struct ParametersInCacheKeyAndForwardedToOrigin {
77    #[serde(rename = "CookiesConfig")]
78    pub(super) cookies_config: CookiesConfig,
79    #[serde(rename = "EnableAcceptEncodingBrotli", skip_serializing_if = "Option::is_none")]
80    pub(super) accept_encoding_brotli: Option<bool>,
81    #[serde(rename = "EnableAcceptEncodingGzip")]
82    pub(super) accept_encoding_gzip: bool,
83    #[serde(rename = "HeadersConfig")]
84    pub(super) headers_config: HeadersConfig,
85    #[serde(rename = "QueryStringsConfig")]
86    pub(super) query_strings_config: QueryStringsConfig,
87}
88
89#[derive(Debug, Serialize)]
90pub struct HeadersConfig {
91    #[serde(rename = "HeaderBehavior")]
92    pub(super) headers_behavior: String,
93    #[serde(rename = "Headers", skip_serializing_if = "Option::is_none")]
94    pub(super) headers: Option<Vec<String>>,
95}
96
97#[derive(Debug, Serialize)]
98pub struct QueryStringsConfig {
99    #[serde(rename = "QueryStringBehavior")]
100    pub(super) query_strings_behavior: String,
101    #[serde(rename = "QueryStrings", skip_serializing_if = "Option::is_none")]
102    pub(super) query_strings: Option<Vec<String>>,
103}
104
105#[derive(Debug, Serialize)]
106pub struct CookiesConfig {
107    #[serde(rename = "CookieBehavior")]
108    pub(super) cookie_behavior: String,
109    #[serde(rename = "Cookies", skip_serializing_if = "Option::is_none")]
110    pub(super) cookies: Option<Vec<String>>,
111}
112
113ref_struct!(DistributionRef);
114
115#[derive(Debug, Serialize)]
116pub struct Distribution {
117    #[serde(skip)]
118    pub(super) id: Id,
119    #[serde(skip)]
120    pub(super) resource_id: String,
121    #[serde(rename = "Type")]
122    pub(super) r#type: String,
123    #[serde(rename = "Properties")]
124    pub(super) properties: DistributionProperties,
125}
126dto_methods!(Distribution);
127
128#[derive(Debug, Serialize)]
129pub struct DistributionProperties {
130    #[serde(rename = "DistributionConfig")]
131    pub(super) config: DistributionConfig,
132}
133
134#[derive(Debug, Serialize)]
135pub struct DistributionConfig {
136    #[serde(rename = "Aliases", skip_serializing_if = "Option::is_none")]
137    pub(super) aliases: Option<Vec<String>>, // probably can limit possible values this further
138    #[serde(rename = "CacheBehaviors", skip_serializing_if = "Option::is_none")]
139    pub(super) cache_behaviors: Option<Vec<CacheBehavior>>,
140    #[serde(rename = "CNAMEs", skip_serializing_if = "Option::is_none")]
141    pub(super) cnames: Option<Vec<String>>,
142    #[serde(rename = "DefaultCacheBehavior")]
143    pub(super) default_cache_behavior: DefaultCacheBehavior,
144    #[serde(rename = "DefaultRootObject")]
145    pub(super) default_root_object: String,
146    #[serde(rename = "Enabled")]
147    pub(super) enabled: bool,
148    #[serde(rename = "HttpVersion", skip_serializing_if = "Option::is_none")]
149    pub(super) http_version: Option<String>,
150    #[serde(rename = "IPV6Enabled", skip_serializing_if = "Option::is_none")]
151    pub(super) ipv6_enabled: Option<bool>,
152    #[serde(rename = "OriginGroups", skip_serializing_if = "Option::is_none")]
153    pub(super) origin_groups: Option<OriginGroups>,
154    #[serde(rename = "Origins", skip_serializing_if = "Option::is_none")]
155    pub(super) origins: Option<Vec<Origin>>,
156    #[serde(rename = "PriceClass", skip_serializing_if = "Option::is_none")]
157    pub(super) price_class: Option<String>,
158    #[serde(rename = "ViewerCertificate", skip_serializing_if = "Option::is_none")]
159    pub(super) viewer_certificate: Option<ViewerCertificate>,
160    // "Restrictions" : Restrictions,
161    // "Logging" : Logging,
162    // "ConnectionMode" : String,
163    // "ContinuousDeploymentPolicyId" : String,
164    // "CustomErrorResponses" : [ CustomErrorResponse, ... ],
165    // "TenantConfig" : TenantConfig,
166    // "Staging" : Boolean,
167    // "WebACLId" : String
168}
169
170#[derive(Debug, Serialize)]
171pub struct ViewerCertificate {
172    #[serde(rename = "AcmCertificateArn", skip_serializing_if = "Option::is_none")]
173    pub(super) acm_cert_arn: Option<String>,
174    #[serde(rename = "CloudFrontDefaultCertificate", skip_serializing_if = "Option::is_none")]
175    pub(super) cloudfront_default_cert: Option<bool>,
176    #[serde(rename = "IamCertificateId", skip_serializing_if = "Option::is_none")]
177    pub(super) iam_cert_id: Option<String>,
178    #[serde(rename = "MinimumProtocolVersion", skip_serializing_if = "Option::is_none")]
179    pub(super) min_protocol_version: Option<String>,
180    #[serde(rename = "SslSupportMethod", skip_serializing_if = "Option::is_none")]
181    pub(super) ssl_support_method: Option<String>,
182}
183
184#[derive(Debug, Serialize)]
185pub struct OriginGroups {
186    #[serde(rename = "Items")]
187    pub(super) items: Vec<OriginGroup>,
188    #[serde(rename = "Quantity")]
189    pub(super) quantity: u32,
190}
191
192#[derive(Debug, Serialize)]
193pub struct OriginGroup {
194    #[serde(rename = "Id")]
195    pub(super) id: String,
196    #[serde(rename = "FailoverCriteria")]
197    pub(super) fail_over_criteria: FailOverCriteria,
198    #[serde(rename = "Members")]
199    pub(super) members: OriginGroupMembers,
200    #[serde(rename = "SelectionCriteria", skip_serializing_if = "Option::is_none")]
201    pub(super) selection_criteria: Option<String>,
202}
203
204#[derive(Debug, Serialize)]
205pub struct OriginGroupMembers {
206    #[serde(rename = "Items")]
207    pub(super) items: Vec<u32>, // exactly two
208    #[serde(rename = "Quantity")]
209    pub(super) quantity: u32,
210}
211
212#[derive(Debug, Serialize)]
213pub struct OriginGroupMember {
214    #[serde(rename = "OriginId")]
215    pub(super) origin_id: String,
216}
217
218#[derive(Debug, Serialize)]
219pub struct FailOverCriteria {
220    #[serde(rename = "StatusCodes")]
221    pub(super) status_codes: StatusCodes,
222}
223
224#[derive(Debug, Serialize)]
225pub struct StatusCodes {
226    #[serde(rename = "Items")]
227    pub(super) items: Vec<u32>, // min 1
228    #[serde(rename = "Quantity")]
229    pub(super) quantity: u32,
230}
231
232// should have AN origin
233#[derive(Debug, Serialize)]
234pub struct Origin {
235    #[serde(rename = "Id")]
236    pub(super) id: String,
237    #[serde(skip)]
238    pub(super) s3_bucket_policy: Option<BucketPolicy>,
239    #[serde(rename = "DomainName")]
240    pub(super) domain_name: Value,
241    #[serde(rename = "ConnectionAttempts", skip_serializing_if = "Option::is_none")]
242    pub(super) connection_attempts: Option<u8>,
243    #[serde(rename = "ConnectionTimeout", skip_serializing_if = "Option::is_none")]
244    pub(super) connection_timeout: Option<u16>,
245    #[serde(rename = "OriginAccessControlId", skip_serializing_if = "Option::is_none")]
246    pub(super) origin_access_control_id: Option<Value>,
247    #[serde(rename = "OriginPath", skip_serializing_if = "Option::is_none")]
248    pub(super) origin_path: Option<String>,
249    #[serde(rename = "ResponseCompletionTimeout", skip_serializing_if = "Option::is_none")]
250    pub(super) response_completion_timeout: Option<u16>,
251    #[serde(rename = "S3OriginConfig", skip_serializing_if = "Option::is_none")]
252    pub(super) s3origin_config: Option<S3OriginConfig>,
253    #[serde(rename = "OriginCustomHeaders", skip_serializing_if = "Option::is_none")]
254    pub(super) origin_custom_headers: Option<Vec<OriginCustomHeader>>,
255    #[serde(rename = "VpcOriginConfig", skip_serializing_if = "Option::is_none")]
256    pub(super) vpc_origin_config: Option<VpcOriginConfig>,
257    #[serde(rename = "CustomOriginConfig", skip_serializing_if = "Option::is_none")]
258    pub(super) custom_origin_config: Option<CustomOriginConfig>,
259    // "OriginShield"
260}
261
262impl Origin {
263    pub fn get_origin_id(&self) -> &str {
264        self.id.as_str()
265    }
266}
267
268#[derive(Debug, Serialize)]
269pub struct OriginCustomHeader {
270    #[serde(rename = "HeaderName")]
271    pub(super) header_name: String,
272    #[serde(rename = "HeaderValue")]
273    pub(super) header_value: String,
274}
275
276#[derive(Debug, Serialize)]
277pub struct VpcOriginConfig {
278    #[serde(rename = "VpcOriginId")]
279    pub(super) vpc_origin_id: String,
280    #[serde(rename = "OriginKeepaliveTimeout", skip_serializing_if = "Option::is_none")]
281    pub(super) origin_keep_alive_timeout: Option<u32>, // 1-5
282    #[serde(rename = "OriginReadTimeout", skip_serializing_if = "Option::is_none")]
283    pub(super) origin_read_timeout: Option<u32>, // 1-120
284    #[serde(rename = "OwnerAccountId", skip_serializing_if = "Option::is_none")]
285    pub(super) owner_account_id: Option<String>,
286}
287
288
289#[derive(Debug, Serialize)]
290pub struct CustomOriginConfig {
291    #[serde(rename = "OriginProtocolPolicy")]
292    pub(super) origin_protocol_policy: String, // http-only | match-viewer | https-only
293    #[serde(rename = "HTTPPort", skip_serializing_if = "Option::is_none")]
294    pub(super) http_port: Option<u16>,
295    #[serde(rename = "HTTPSPort", skip_serializing_if = "Option::is_none")]
296    pub(super) https_port: Option<u16>,
297    #[serde(rename = "IpAddressType", skip_serializing_if = "Option::is_none")]
298    pub(super) ip_address_type: Option<String>, // ipv4 | ipv6 | dualstack
299    #[serde(rename = "OriginKeepaliveTimeout", skip_serializing_if = "Option::is_none")]
300    pub(super) origin_keep_alive_timeout: Option<u8>, // 1 - 120
301    #[serde(rename = "OriginReadTimeout", skip_serializing_if = "Option::is_none")]
302    pub(super) origin_read_timeout: Option<u8>, // 1 - 120
303    #[serde(rename = "OriginSSLProtocols", skip_serializing_if = "Option::is_none")]
304    pub(super) origin_ssl_protocols: Option<Vec<String>>,
305}
306
307#[derive(Debug, Serialize)]
308pub struct S3OriginConfig {
309    #[serde(rename = "OriginReadTimeout", skip_serializing_if = "Option::is_none")]
310    pub(super) origin_read_timeout: Option<u8>,
311}
312
313#[derive(Debug, Serialize)]
314pub struct DefaultCacheBehavior {
315    // did not add deprecated fields like MaxTTL //
316    #[serde(rename = "TargetOriginId")]
317    pub(super) target_origin_id: String,
318    #[serde(rename = "CachePolicyId")]
319    pub(super) cache_policy_id: Value,
320    #[serde(rename = "ViewerProtocolPolicy")]
321    pub(super) viewer_protocol_policy: String,
322    #[serde(rename = "AllowedMethods", skip_serializing_if = "Option::is_none")]
323    pub(super) allowed_methods: Option<Vec<String>>,
324    #[serde(rename = "CachedMethods", skip_serializing_if = "Option::is_none")]
325    pub(super) cached_methods: Option<Vec<String>>,
326    #[serde(rename = "Compress", skip_serializing_if = "Option::is_none")]
327    pub(super) compress: Option<bool>,
328    // #[serde(rename = "TrustedKeyGroups", skip_serializing_if = "Option::is_none")]
329    // pub(super) trusted_key_groups: Option<Vec<String>>,
330    // "RealtimeLogConfigArn" : String,
331    // "GrpcConfig" : GrpcConfig, => Update your distribution's cache behavior to allow HTTP methods, including the POST method; Specify HTTP/2 as one of the supported HTTP versions.
332    // "OriginRequestPolicyId" : String,
333    // "LambdaFunctionAssociations" : [ LambdaFunctionAssociation, ... ],
334    // "FunctionAssociations" : [ FunctionAssociation, ... ],
335    // "FieldLevelEncryptionId" : String,
336    // "ResponseHeadersPolicyId" : String,
337    // "SmoothStreaming" : Boolean,
338}
339
340#[derive(Debug, Serialize)]
341pub struct CacheBehavior {
342    #[serde(rename = "PathPattern")]
343    pub(super) path_pattern: String,
344    #[serde(rename = "TargetOriginId")]
345    pub(super) target_origin_id: String,
346    #[serde(rename = "CachePolicyId")]
347    pub(super) cache_policy_id: String,
348    #[serde(rename = "ViewerProtocolPolicy")]
349    pub(super) viewer_protocol_policy: String,
350    #[serde(rename = "AllowedMethods", skip_serializing_if = "Option::is_none")]
351    pub(super) allowed_methods: Option<Vec<String>>,
352    #[serde(rename = "CachedMethods", skip_serializing_if = "Option::is_none")]
353    pub(super) cached_methods: Option<Vec<String>>,
354    #[serde(rename = "Compress", skip_serializing_if = "Option::is_none")]
355    pub(super) compress: Option<bool>,
356    #[serde(rename = "TrustedKeyGroups", skip_serializing_if = "Option::is_none")]
357    pub(super) trusted_key_groups: Option<Vec<String>>,
358    // "RealtimeLogConfigArn" : String,
359    // "GrpcConfig" : GrpcConfig,
360    // "OriginRequestPolicyId" : String,
361    // "LambdaFunctionAssociations" : [ LambdaFunctionAssociation, ... ],
362    // "FunctionAssociations" : [ FunctionAssociation, ... ],
363    // "FieldLevelEncryptionId" : String,
364    // "ResponseHeadersPolicyId" : String,
365    // "SmoothStreaming" : Boolean,
366}