use http::HeaderMap;
use super::{PartNumber, UploadId};
use crate::operation::{Checksum, ChecksumType, ObjectKey, PageSize, RequestIds};
#[derive(Clone, Default, derive_more::Debug, Eq, PartialEq)]
pub struct ListMultipartUploadsRequest {
pub prefix: Option<String>,
pub delimiter: Option<String>,
pub key_marker: Option<String>,
pub upload_id_marker: Option<UploadId>,
pub max_uploads: PageSize,
#[debug("{:?}", "<redacted>")]
pub headers: HeaderMap,
}
impl ListMultipartUploadsRequest {
pub fn with_headers(mut self, headers: HeaderMap) -> Self {
self.headers = headers;
self
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct MultipartUploadEntry {
pub key: ObjectKey,
upload_id: UploadId,
pub initiated: Option<time::OffsetDateTime>,
pub storage_class: Option<String>,
}
impl MultipartUploadEntry {
pub(crate) fn new(
key: ObjectKey,
upload_id: UploadId,
initiated: Option<time::OffsetDateTime>,
storage_class: Option<String>,
) -> Self {
Self {
key,
upload_id,
initiated,
storage_class,
}
}
pub const fn upload_id(&self) -> &UploadId {
&self.upload_id
}
}
#[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct ListMultipartUploadsOutput {
pub uploads: Vec<MultipartUploadEntry>,
pub common_prefixes: Vec<String>,
pub is_truncated: bool,
pub next_key_marker: Option<String>,
pub next_upload_id_marker: Option<UploadId>,
pub request_ids: RequestIds,
}
#[derive(Clone, derive_more::Debug, Eq, PartialEq)]
pub struct ListPartsRequest {
key: ObjectKey,
upload_id: UploadId,
pub part_number_marker: Option<PartNumber>,
pub max_parts: PageSize,
#[debug("{:?}", "<redacted>")]
pub headers: HeaderMap,
}
impl ListPartsRequest {
pub fn new(key: ObjectKey, upload_id: UploadId) -> Self {
Self {
key,
upload_id,
part_number_marker: None,
max_parts: PageSize::default(),
headers: HeaderMap::new(),
}
}
pub fn with_headers(mut self, headers: HeaderMap) -> Self {
self.headers = headers;
self
}
pub const fn key(&self) -> &ObjectKey {
&self.key
}
pub const fn upload_id(&self) -> &UploadId {
&self.upload_id
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ListedPart {
part_number: PartNumber,
pub e_tag: String,
pub last_modified: Option<time::OffsetDateTime>,
pub size: u64,
pub checksum: Checksum,
}
impl ListedPart {
pub(crate) fn new(
part_number: PartNumber,
e_tag: String,
last_modified: Option<time::OffsetDateTime>,
size: u64,
checksum: Checksum,
) -> Self {
Self {
part_number,
e_tag,
last_modified,
size,
checksum,
}
}
pub const fn part_number(&self) -> PartNumber {
self.part_number
}
pub fn completed_part(&self) -> Result<super::CompletedPart, super::MultipartError> {
super::CompletedPart::new(self.part_number.get(), self.e_tag.clone())
.map(|part| part.with_checksum(self.checksum.clone()))
}
}
#[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct ListPartsOutput {
pub parts: Vec<ListedPart>,
pub is_truncated: bool,
pub next_part_number_marker: Option<PartNumber>,
pub checksum_algorithm: Option<String>,
pub checksum_type: Option<ChecksumType>,
pub request_ids: RequestIds,
}