s3_wire/operation/multipart/
listing.rs1use super::{PartNumber, UploadId};
2use crate::operation::{Checksum, ChecksumType, ObjectKey, PageSize, RequestIds};
3
4#[derive(Clone, Debug, Default, Eq, PartialEq)]
6pub struct ListMultipartUploadsRequest {
7 pub prefix: Option<String>,
9 pub delimiter: Option<String>,
11 pub key_marker: Option<String>,
13 pub upload_id_marker: Option<UploadId>,
15 pub max_uploads: PageSize,
17}
18
19#[derive(Clone, Debug, Eq, PartialEq)]
21pub struct MultipartUploadEntry {
22 pub key: ObjectKey,
24 upload_id: UploadId,
26 pub initiated: Option<time::OffsetDateTime>,
28 pub storage_class: Option<String>,
30}
31
32impl MultipartUploadEntry {
33 pub(crate) fn new(
34 key: ObjectKey,
35 upload_id: UploadId,
36 initiated: Option<time::OffsetDateTime>,
37 storage_class: Option<String>,
38 ) -> Self {
39 Self {
40 key,
41 upload_id,
42 initiated,
43 storage_class,
44 }
45 }
46
47 pub const fn upload_id(&self) -> &UploadId {
49 &self.upload_id
50 }
51}
52
53#[derive(Clone, Debug, Default, Eq, PartialEq)]
55pub struct ListMultipartUploadsOutput {
56 pub uploads: Vec<MultipartUploadEntry>,
58 pub common_prefixes: Vec<String>,
60 pub is_truncated: bool,
62 pub next_key_marker: Option<String>,
64 pub next_upload_id_marker: Option<UploadId>,
66 pub request_ids: RequestIds,
68}
69
70#[derive(Clone, Debug, Eq, PartialEq)]
72pub struct ListPartsRequest {
73 key: ObjectKey,
74 upload_id: UploadId,
75 pub part_number_marker: Option<PartNumber>,
77 pub max_parts: PageSize,
79}
80
81impl ListPartsRequest {
82 pub fn new(key: ObjectKey, upload_id: UploadId) -> Self {
84 Self {
85 key,
86 upload_id,
87 part_number_marker: None,
88 max_parts: PageSize::default(),
89 }
90 }
91
92 pub const fn key(&self) -> &ObjectKey {
94 &self.key
95 }
96
97 pub const fn upload_id(&self) -> &UploadId {
99 &self.upload_id
100 }
101}
102
103#[derive(Clone, Debug, Eq, PartialEq)]
105pub struct ListedPart {
106 part_number: PartNumber,
107 pub e_tag: String,
109 pub last_modified: Option<time::OffsetDateTime>,
111 pub size: u64,
113 pub checksum: Checksum,
115}
116
117impl ListedPart {
118 pub(crate) fn new(
119 part_number: PartNumber,
120 e_tag: String,
121 last_modified: Option<time::OffsetDateTime>,
122 size: u64,
123 checksum: Checksum,
124 ) -> Self {
125 Self {
126 part_number,
127 e_tag,
128 last_modified,
129 size,
130 checksum,
131 }
132 }
133
134 pub const fn part_number(&self) -> PartNumber {
136 self.part_number
137 }
138
139 pub fn completed_part(&self) -> Result<super::CompletedPart, super::MultipartError> {
141 super::CompletedPart::new(self.part_number.get(), self.e_tag.clone())
142 .map(|part| part.with_checksum(self.checksum.clone()))
143 }
144}
145
146#[derive(Clone, Debug, Default, Eq, PartialEq)]
148pub struct ListPartsOutput {
149 pub parts: Vec<ListedPart>,
151 pub is_truncated: bool,
153 pub next_part_number_marker: Option<PartNumber>,
155 pub checksum_algorithm: Option<String>,
157 pub checksum_type: Option<ChecksumType>,
159 pub request_ids: RequestIds,
161}