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