1use crate::iam::PolicyDocument;
2use crate::shared::Id;
3use crate::{dto_methods, ref_struct};
4use serde::Serialize;
5use serde_json::Value;
6
7ref_struct!(BucketPolicyRef);
8
9#[derive(Debug, Serialize)]
10pub struct BucketPolicy {
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(crate) properties: S3BucketPolicyProperties,
19}
20dto_methods!(BucketPolicy);
21
22#[derive(Debug, Serialize)]
23pub struct S3BucketPolicyProperties {
24 #[serde(rename = "Bucket")]
25 pub(crate) bucket_name: Value,
26 #[serde(rename = "PolicyDocument")]
27 pub(crate) policy_document: PolicyDocument,
28}
29
30ref_struct!(BucketRef);
31
32#[derive(Debug, Serialize)]
33pub struct Bucket {
34 #[serde(skip)]
35 pub(super) id: Id,
36 #[serde(skip)]
37 pub(super) resource_id: String,
38 #[serde(rename = "Type")]
39 pub(super) r#type: String,
40 #[serde(rename = "Properties")]
41 pub(super) properties: BucketProperties,
42}
43dto_methods!(Bucket);
44
45#[derive(Debug, Serialize)]
46pub struct BucketProperties {
47 #[serde(rename = "AbacStatus", skip_serializing_if = "Option::is_none")]
48 pub(super) abac_status: Option<String>,
49 #[serde(rename = "AccelerateConfiguration", skip_serializing_if = "Option::is_none")]
50 pub(super) accelerate_configuration: Option<AccelerateConfiguration>,
51 #[serde(rename = "BucketName", skip_serializing_if = "Option::is_none")]
52 pub(super) bucket_name: Option<String>,
53 #[serde(rename = "BucketEncryption", skip_serializing_if = "Option::is_none")]
54 pub(super) bucket_encryption: Option<BucketEncryption>,
55 #[serde(rename = "CorsConfiguration", skip_serializing_if = "Option::is_none")]
56 pub(super) cors_configuration: Option<CorsConfiguration>,
57 #[serde(rename = "IntelligentTieringConfigurations", skip_serializing_if = "Option::is_none")]
58 pub(super) intelligent_tiering_configurations: Option<Vec<IntelligentTieringConfiguration>>,
59 #[serde(rename = "LifecycleConfiguration", skip_serializing_if = "Option::is_none")]
60 pub(super) lifecycle_configuration: Option<LifecycleConfiguration>,
61 #[serde(rename = "MetadataConfiguration", skip_serializing_if = "Option::is_none")]
62 pub(super) metadata_configuration: Option<MetadataConfiguration>,
63 #[serde(rename = "PublicAccessBlockConfiguration", skip_serializing_if = "Option::is_none")]
65 pub(super) public_access_block_configuration: Option<PublicAccessBlockConfiguration>,
66 #[serde(rename = "VersioningConfiguration", skip_serializing_if = "Option::is_none")]
67 pub(super) versioning_configuration: Option<VersioningConfig>,
68 #[serde(rename = "WebsiteConfiguration", skip_serializing_if = "Option::is_none")]
69 pub(super) website_configuration: Option<WebsiteConfiguration>,
70 }
82
83#[derive(Debug, Serialize)]
84pub struct MetadataConfiguration {
85 #[serde(rename = "Destination")]
86 pub(super) destination: Option<MetadataDestination>,
87 #[serde(rename = "InventoryTableConfiguration")]
88 pub(super) inventory_table_configuration: Option<InventoryTableConfiguration>,
89 #[serde(rename = "JournalTableConfiguration")]
90 pub(super) journal_table_configuration: JournalTableConfiguration,
91}
92
93#[derive(Debug, Serialize)]
94pub struct MetadataDestination {
95 #[serde(rename = "TableBucketArn", skip_serializing_if = "Option::is_none")]
96 pub(super) table_bucket_arn: Option<Value>,
97 #[serde(rename = "TableBucketType")]
98 pub(super) table_bucket_type: String,
99 #[serde(rename = "TableNamespace", skip_serializing_if = "Option::is_none")]
100 pub(super) table_namespace: Option<String>,
101}
102
103#[derive(Debug, Serialize)]
104pub struct InventoryTableConfiguration {
105 #[serde(rename = "ConfigurationState")]
106 pub(super) configuration_state: String,
107 #[serde(rename = "TableArn", skip_serializing_if = "Option::is_none")]
108 pub(super) table_arn: Option<Value>,
109 #[serde(rename = "TableName", skip_serializing_if = "Option::is_none")]
110 pub(super) table_name: Option<String>,
111 }
114
115#[derive(Debug, Serialize)]
116pub struct JournalTableConfiguration {
117 #[serde(rename = "RecordExpiration")]
118 pub(super) record_expiration: RecordExpiration,
119 #[serde(rename = "TableArn", skip_serializing_if = "Option::is_none")]
120 pub(super) table_arn: Option<Value>,
121 #[serde(rename = "TableName", skip_serializing_if = "Option::is_none")]
122 pub(super) table_name: Option<String>,
123 }
126
127#[derive(Debug, Serialize)]
128pub struct RecordExpiration {
129 #[serde(rename = "Days", skip_serializing_if = "Option::is_none")]
130 pub(super) days: Option<u32>,
131 #[serde(rename = "Expiration")]
132 pub(super) expiration: String,
133}
134
135#[derive(Debug, Serialize)]
136pub struct IntelligentTieringConfiguration {
137 #[serde(rename = "Id")]
138 pub(super) id: String,
139 #[serde(rename = "Prefix", skip_serializing_if = "Option::is_none")]
140 pub(super) prefix: Option<String>,
141 #[serde(rename = "Status")]
142 pub(super) status: String,
143 #[serde(rename = "TagFilters", skip_serializing_if = "Option::is_none")]
144 pub(super) tag_filters: Option<Vec<TagFilter>>,
145 #[serde(rename = "Tierings")]
146 pub(super) tierings: Vec<Tiering>,
147}
148
149#[derive(Debug, Serialize)]
150pub struct Tiering {
151 #[serde(rename = "AccessTier")]
152 pub(super) access_tier: String,
153 #[serde(rename = "Days")]
154 pub(super) days: u16,
155}
156
157#[derive(Debug, Serialize)]
158pub struct TagFilter {
159 #[serde(rename = "Key")]
160 pub(super) key: String,
161 #[serde(rename = "Value")]
162 pub(super) value: String,
163}
164
165#[derive(Debug, Serialize)]
166pub struct AccelerateConfiguration {
167 #[serde(rename = "AccelerationStatus")]
168 pub(super) acceleration_status: String,
169}
170
171#[derive(Debug, Serialize)]
172pub struct BucketEncryption {
173 #[serde(rename = "ServerSideEncryptionConfiguration")]
174 pub(super) server_side_encryption_configuration: Vec<ServerSideEncryptionRule>,
175}
176
177#[derive(Debug, Serialize)]
178pub struct ServerSideEncryptionRule {
179 #[serde(rename = "ServerSideEncryptionByDefault")]
180 pub(super) server_side_encryption_by_default: ServerSideEncryptionByDefault,
181 #[serde(rename = "BucketKeyEnabled", skip_serializing_if = "Option::is_none")]
182 pub(super) bucket_key_enabled: Option<bool>,
183}
184
185#[derive(Debug, Serialize)]
186pub struct ServerSideEncryptionByDefault {
187 #[serde(rename = "SSEAlgorithm")]
188 pub(super) sse_algorithm: String,
189 #[serde(rename = "KMSMasterKeyID", skip_serializing_if = "Option::is_none")]
190 pub(super) kms_master_key_id: Option<String>,
191}
192
193#[derive(Debug, Serialize)]
194pub struct CorsConfiguration {
195 #[serde(rename = "CorsRules")]
196 pub(super) cors_rules: Vec<CorsRule>,
197}
198
199#[derive(Debug, Serialize)]
200pub struct CorsRule {
201 #[serde(rename = "AllowedHeaders", skip_serializing_if = "Option::is_none")]
202 pub(super) allowed_headers: Option<Vec<String>>,
203 #[serde(rename = "AllowedMethods")]
204 pub(super) allowed_methods: Vec<String>,
205 #[serde(rename = "AllowedOrigins")]
206 pub(super) allowed_origins: Vec<String>,
207 #[serde(rename = "ExposedHeaders", skip_serializing_if = "Option::is_none")]
208 pub(super) exposed_headers: Option<Vec<String>>,
209 #[serde(rename = "MaxAge", skip_serializing_if = "Option::is_none")]
210 pub(super) max_age: Option<u64>,
211}
212
213#[derive(Debug, Serialize)]
214pub struct LifecycleConfiguration {
215 #[serde(rename = "Rules")]
216 pub(super) rules: Vec<LifecycleRule>,
217 #[serde(rename = "TransitionDefaultMinimumObjectSize", skip_serializing_if = "Option::is_none")]
218 pub(super) transition_minimum_size: Option<String>,
219}
220
221#[derive(Debug, Serialize)]
222pub struct LifecycleRuleTransition {
223 #[serde(rename = "StorageClass")]
224 pub(super) storage_class: String,
225 #[serde(rename = "TransitionInDays")]
226 pub(super) transition_in_days: u16, }
230
231#[derive(Debug, Serialize)]
232pub struct NonCurrentVersionTransition {
233 #[serde(rename = "StorageClass")]
234 pub(super) storage_class: String,
235 #[serde(rename = "TransitionInDays")]
236 pub(super) transition_in_days: u32,
237 #[serde(rename = "NewerNoncurrentVersions")]
238 pub(super) newer_non_current_versions: Option<u32>,
239}
240
241#[derive(Debug, Serialize)]
242pub struct LifecycleRule {
243 #[serde(rename = "Id", skip_serializing_if = "Option::is_none")]
244 pub(super) id: Option<String>,
245 #[serde(rename = "Status")]
246 pub(super) status: String,
247 #[serde(rename = "ExpirationInDays", skip_serializing_if = "Option::is_none")]
248 pub(super) expiration_in_days: Option<u16>,
249 #[serde(rename = "Prefix", skip_serializing_if = "Option::is_none")]
250 pub(super) prefix: Option<String>,
251 #[serde(rename = "ObjectSizeGreaterThan", skip_serializing_if = "Option::is_none")]
252 pub(super) object_size_greater_than: Option<u32>,
253 #[serde(rename = "ObjectSizeLessThan", skip_serializing_if = "Option::is_none")]
254 pub(super) object_size_less_than: Option<u32>,
255 #[serde(rename = "AbortIncompleteMultipartUpload", skip_serializing_if = "Option::is_none")]
256 pub(super) abort_incomplete_multipart_upload: Option<u16>,
257 #[serde(rename = "NoncurrentVersionExpiration", skip_serializing_if = "Option::is_none")]
258 pub(super) non_current_version_expiration: Option<u16>,
259 #[serde(rename = "Transitions", skip_serializing_if = "Option::is_none")]
260 pub(super) transitions: Option<Vec<LifecycleRuleTransition>>,
261 #[serde(rename = "NoncurrentVersionTransitions", skip_serializing_if = "Option::is_none")]
262 pub(super) non_current_version_transitions: Option<Vec<NonCurrentVersionTransition>>,
263 }
267
268#[derive(Debug, Serialize)]
269pub struct TopicConfiguration {
270 #[serde(rename = "Event")]
271 pub(super) event: String,
272 #[serde(rename = "Topic")]
273 pub(super) topic: String,
274 #[serde(rename = "Filter", skip_serializing_if = "Option::is_none")]
275 pub(super) filter: Option<NotificationFilter>,
276}
277
278#[derive(Debug, Serialize)]
279pub struct QueueConfiguration {
280 #[serde(rename = "Event")]
281 pub(super) event: String,
282 #[serde(rename = "Queue")]
283 pub(super) queue: String,
284 #[serde(rename = "Filter", skip_serializing_if = "Option::is_none")]
285 pub(super) filter: Option<NotificationFilter>,
286}
287
288#[derive(Debug, Serialize)]
289pub struct LambdaConfiguration {
290 #[serde(rename = "Event")]
291 pub(super) event: String,
292 #[serde(rename = "Function")]
293 pub(super) function: String,
294 #[serde(rename = "Filter", skip_serializing_if = "Option::is_none")]
295 pub(super) filter: Option<NotificationFilter>,
296}
297
298#[derive(Debug, Serialize)]
299pub struct NotificationFilter {
300 #[serde(rename = "S3Key", skip_serializing_if = "Option::is_none")]
301 pub(super) s3_key: Option<S3KeyFilter>,
302}
303
304#[derive(Debug, Serialize)]
305pub struct S3KeyFilter {
306 #[serde(rename = "Rules")]
307 pub(super) rules: Vec<FilterRule>,
308}
309
310#[derive(Debug, Serialize)]
311pub struct FilterRule {
312 #[serde(rename = "Name")]
313 pub(super) name: String,
314 #[serde(rename = "Value")]
315 pub(super) value: String,
316}
317
318#[derive(Debug, Serialize)]
319pub struct PublicAccessBlockConfiguration {
320 #[serde(rename = "BlockPublicAcls", skip_serializing_if = "Option::is_none")]
321 pub(super) block_public_acls: Option<bool>,
322 #[serde(rename = "BlockPublicPolicy", skip_serializing_if = "Option::is_none")]
323 pub(super) block_public_policy: Option<bool>,
324 #[serde(rename = "IgnorePublicAcls", skip_serializing_if = "Option::is_none")]
325 pub(super) ignore_public_acls: Option<bool>,
326 #[serde(rename = "RestrictPublicBuckets", skip_serializing_if = "Option::is_none")]
327 pub(super) restrict_public_buckets: Option<bool>,
328}
329
330#[derive(Debug, Serialize)]
331pub struct VersioningConfig {
332 #[serde(rename = "Status")]
333 pub(super) status: String,
334}
335
336#[derive(Debug, Serialize)]
337pub struct WebsiteConfiguration {
338 #[serde(rename = "IndexDocument", skip_serializing_if = "Option::is_none")]
339 pub(super) index_document: Option<String>,
340 #[serde(rename = "ErrorDocument", skip_serializing_if = "Option::is_none")]
341 pub(super) error_document: Option<String>,
342 #[serde(rename = "RedirectAllRequestsTo", skip_serializing_if = "Option::is_none")]
343 pub(super) redirect_all_requests_to: Option<RedirectAllRequestsTo>,
344}
345
346#[derive(Debug, Serialize)]
347pub struct RedirectAllRequestsTo {
348 #[serde(rename = "HostName")]
349 pub(super) host_name: String,
350 #[serde(rename = "Protocol", skip_serializing_if = "Option::is_none")]
351 pub(super) protocol: Option<String>,
352}