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 {
238 #[serde(rename = "StatusCodes")]
239 pub(super) status_codes: StatusCodes,
240}
241
242#[derive(Debug, Serialize, Deserialize)]
243pub struct StatusCodes {
244 #[serde(rename = "Items")]
245 pub(super) items: Vec<u32>, #[serde(rename = "Quantity")]
247 pub(super) quantity: u32,
248}
249
250#[derive(Debug, Serialize, Deserialize)]
252pub struct Origin {
253 #[serde(rename = "Id")]
254 pub(super) id: String,
255 #[serde(skip)]
256 pub(super) s3_bucket_policy: Option<BucketPolicy>,
257 #[serde(rename = "DomainName")]
258 pub(super) domain_name: Value,
259 #[serde(rename = "ConnectionAttempts", skip_serializing_if = "Option::is_none")]
260 pub(super) connection_attempts: Option<u8>,
261 #[serde(rename = "ConnectionTimeout", skip_serializing_if = "Option::is_none")]
262 pub(super) connection_timeout: Option<u16>,
263 #[serde(rename = "OriginAccessControlId", skip_serializing_if = "Option::is_none")]
264 pub(super) origin_access_control_id: Option<Value>,
265 #[serde(rename = "OriginPath", skip_serializing_if = "Option::is_none")]
266 pub(super) origin_path: Option<String>,
267 #[serde(rename = "ResponseCompletionTimeout", skip_serializing_if = "Option::is_none")]
268 pub(super) response_completion_timeout: Option<u16>,
269 #[serde(rename = "S3OriginConfig", skip_serializing_if = "Option::is_none")]
270 pub(super) s3origin_config: Option<S3OriginConfig>,
271 #[serde(rename = "OriginCustomHeaders", skip_serializing_if = "Option::is_none")]
272 pub(super) origin_custom_headers: Option<Vec<OriginCustomHeader>>,
273 #[serde(rename = "VpcOriginConfig", skip_serializing_if = "Option::is_none")]
274 pub(super) vpc_origin_config: Option<VpcOriginConfig>,
275 #[serde(rename = "CustomOriginConfig", skip_serializing_if = "Option::is_none")]
276 pub(super) custom_origin_config: Option<CustomOriginConfig>,
277 }
279
280impl Origin {
281 pub fn get_origin_id(&self) -> &str {
282 self.id.as_str()
283 }
284}
285
286#[derive(Debug, Serialize, Deserialize)]
287pub struct OriginCustomHeader {
288 #[serde(rename = "HeaderName")]
289 pub(super) header_name: String,
290 #[serde(rename = "HeaderValue")]
291 pub(super) header_value: String,
292}
293
294#[derive(Debug, Serialize, Deserialize)]
295pub struct VpcOriginConfig {
296 #[serde(rename = "VpcOriginId")]
297 pub(super) vpc_origin_id: String,
298 #[serde(rename = "OriginKeepaliveTimeout", skip_serializing_if = "Option::is_none")]
299 pub(super) origin_keep_alive_timeout: Option<u32>, #[serde(rename = "OriginReadTimeout", skip_serializing_if = "Option::is_none")]
301 pub(super) origin_read_timeout: Option<u32>, #[serde(rename = "OwnerAccountId", skip_serializing_if = "Option::is_none")]
303 pub(super) owner_account_id: Option<String>,
304}
305
306
307#[derive(Debug, Serialize, Deserialize)]
308pub struct CustomOriginConfig {
309 #[serde(rename = "OriginProtocolPolicy")]
310 pub(super) origin_protocol_policy: String, #[serde(rename = "HTTPPort", skip_serializing_if = "Option::is_none")]
312 pub(super) http_port: Option<u16>,
313 #[serde(rename = "HTTPSPort", skip_serializing_if = "Option::is_none")]
314 pub(super) https_port: Option<u16>,
315 #[serde(rename = "IpAddressType", skip_serializing_if = "Option::is_none")]
316 pub(super) ip_address_type: Option<String>, #[serde(rename = "OriginKeepaliveTimeout", skip_serializing_if = "Option::is_none")]
318 pub(super) origin_keep_alive_timeout: Option<u8>, #[serde(rename = "OriginReadTimeout", skip_serializing_if = "Option::is_none")]
320 pub(super) origin_read_timeout: Option<u8>, #[serde(rename = "OriginSSLProtocols", skip_serializing_if = "Option::is_none")]
322 pub(super) origin_ssl_protocols: Option<Vec<String>>,
323}
324
325#[derive(Debug, Serialize, Deserialize)]
326pub struct S3OriginConfig {
327 #[serde(rename = "OriginReadTimeout", skip_serializing_if = "Option::is_none")]
328 pub(super) origin_read_timeout: Option<u8>,
329}
330
331#[derive(Debug, Serialize, Deserialize)]
332pub struct DefaultCacheBehavior {
333 #[serde(rename = "TargetOriginId")]
335 pub(super) target_origin_id: String,
336 #[serde(rename = "CachePolicyId")]
337 pub(super) cache_policy_id: Value,
338 #[serde(rename = "ViewerProtocolPolicy")]
339 pub(super) viewer_protocol_policy: String,
340 #[serde(rename = "AllowedMethods", skip_serializing_if = "Option::is_none")]
341 pub(super) allowed_methods: Option<Vec<String>>,
342 #[serde(rename = "CachedMethods", skip_serializing_if = "Option::is_none")]
343 pub(super) cached_methods: Option<Vec<String>>,
344 #[serde(rename = "Compress", skip_serializing_if = "Option::is_none")]
345 pub(super) compress: Option<bool>,
346 }
357
358#[derive(Debug, Serialize, Deserialize)]
359pub struct CacheBehavior {
360 #[serde(rename = "PathPattern")]
361 pub(super) path_pattern: String,
362 #[serde(rename = "TargetOriginId")]
363 pub(super) target_origin_id: String,
364 #[serde(rename = "CachePolicyId")]
365 pub(super) cache_policy_id: String,
366 #[serde(rename = "ViewerProtocolPolicy")]
367 pub(super) viewer_protocol_policy: String,
368 #[serde(rename = "AllowedMethods", skip_serializing_if = "Option::is_none")]
369 pub(super) allowed_methods: Option<Vec<String>>,
370 #[serde(rename = "CachedMethods", skip_serializing_if = "Option::is_none")]
371 pub(super) cached_methods: Option<Vec<String>>,
372 #[serde(rename = "Compress", skip_serializing_if = "Option::is_none")]
373 pub(super) compress: Option<bool>,
374 #[serde(rename = "TrustedKeyGroups", skip_serializing_if = "Option::is_none")]
375 pub(super) trusted_key_groups: Option<Vec<String>>,
376 }