1use crate::s3::BucketPolicy;
2use crate::shared::Id;
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5use crate::{dto_methods, ref_struct};
6
7ref_struct!(OriginAccessControlRef);
8
9#[derive(Debug, Serialize, Deserialize)]
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, Deserialize)]
23pub struct OriginControlProperties {
24 #[serde(rename = "OriginAccessControlConfig")]
25 pub(super) config: OriginAccessControlConfig,
26}
27
28#[derive(Debug, Serialize, Deserialize)]
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, Deserialize)]
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, Deserialize)]
56pub struct CachePolicyProperties {
57 #[serde(rename = "CachePolicyConfig")]
58 pub(super) config: CachePolicyConfig,
59}
60
61#[derive(Debug, Serialize, Deserialize)]
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, Deserialize)]
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, Deserialize)]
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, Deserialize)]
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, Deserialize)]
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, Deserialize)]
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, Deserialize)]
129pub struct DistributionProperties {
130 #[serde(rename = "DistributionConfig")]
131 pub(super) config: DistributionConfig,
132}
133
134#[derive(Debug, Serialize, Deserialize)]
135pub struct DistributionConfig {
136 #[serde(rename = "Aliases", skip_serializing_if = "Option::is_none")]
137 pub(super) aliases: Option<Vec<String>>, #[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 }
169
170#[derive(Debug, Serialize, Deserialize)]
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, Deserialize)]
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, Deserialize)]
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, Deserialize)]
205pub struct OriginGroupMembers {
206 #[serde(rename = "Items")]
207 pub(super) items: Vec<u32>, #[serde(rename = "Quantity")]
209 pub(super) quantity: u32,
210}
211
212#[derive(Debug, Serialize, Deserialize)]
213pub struct OriginGroupMember {
214 #[serde(rename = "OriginId")]
215 pub(super) origin_id: String,
216}
217
218#[derive(Debug, Serialize, Deserialize)]
219pub struct FailOverCriteria {
220 #[serde(rename = "StatusCodes")]
221 pub(super) status_codes: StatusCodes,
222}
223
224#[derive(Debug, Serialize, Deserialize)]
225pub struct StatusCodes {
226 #[serde(rename = "Items")]
227 pub(super) items: Vec<u32>, #[serde(rename = "Quantity")]
229 pub(super) quantity: u32,
230}
231
232#[derive(Debug, Serialize, Deserialize)]
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 }
261
262impl Origin {
263 pub fn get_origin_id(&self) -> &str {
264 self.id.as_str()
265 }
266}
267
268#[derive(Debug, Serialize, Deserialize)]
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, Deserialize)]
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>, #[serde(rename = "OriginReadTimeout", skip_serializing_if = "Option::is_none")]
283 pub(super) origin_read_timeout: Option<u32>, #[serde(rename = "OwnerAccountId", skip_serializing_if = "Option::is_none")]
285 pub(super) owner_account_id: Option<String>,
286}
287
288
289#[derive(Debug, Serialize, Deserialize)]
290pub struct CustomOriginConfig {
291 #[serde(rename = "OriginProtocolPolicy")]
292 pub(super) origin_protocol_policy: String, #[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>, #[serde(rename = "OriginKeepaliveTimeout", skip_serializing_if = "Option::is_none")]
300 pub(super) origin_keep_alive_timeout: Option<u8>, #[serde(rename = "OriginReadTimeout", skip_serializing_if = "Option::is_none")]
302 pub(super) origin_read_timeout: Option<u8>, #[serde(rename = "OriginSSLProtocols", skip_serializing_if = "Option::is_none")]
304 pub(super) origin_ssl_protocols: Option<Vec<String>>,
305}
306
307#[derive(Debug, Serialize, Deserialize)]
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, Deserialize)]
314pub struct DefaultCacheBehavior {
315 #[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 }
339
340#[derive(Debug, Serialize, Deserialize)]
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 }