use crate::codec::support::{from_wire_timestamp, to_wire_timestamp};
use crate::generated::v1;
use crate::s3::{
ByteRange, CopyObjectRequest, CopyObjectResponse, CreateObjectAccessURLRequest,
CreateObjectAccessURLResponse, DeleteObjectRequest, HeadObjectRequest, HeadObjectResponse,
ListObjectsRequest, ListObjectsResponse, PresignObjectRequest, PresignObjectResponse,
ReadObjectChunk, ReadObjectChunkResult, ReadObjectRequest, S3ObjectMeta, S3ObjectRef,
WriteObjectOpen, WriteObjectRequest, WriteObjectRequestMsg, WriteObjectResponse,
};
pub(crate) fn to_wire_byte_range(value: ByteRange) -> v1::ByteRange {
v1::ByteRange {
start: value.start,
end: value.end,
}
}
pub(crate) fn to_wire_copy_object_request(value: CopyObjectRequest) -> v1::CopyObjectRequest {
v1::CopyObjectRequest {
source: value.source.map(to_wire_s3_object_ref),
destination: value.destination.map(to_wire_s3_object_ref),
if_match: value.if_match,
if_none_match: value.if_none_match,
}
}
pub(crate) fn from_wire_copy_object_response(value: v1::CopyObjectResponse) -> CopyObjectResponse {
CopyObjectResponse {
meta: value.meta.map(from_wire_s3_object_meta),
}
}
pub(crate) fn to_wire_create_object_access_url_request(
value: CreateObjectAccessURLRequest,
) -> v1::CreateObjectAccessUrlRequest {
v1::CreateObjectAccessUrlRequest {
r#ref: value.r#ref.map(to_wire_s3_object_ref),
method: value.method,
expires_seconds: value.expires_seconds,
content_type: value.content_type,
content_disposition: value.content_disposition,
headers: value.headers,
}
}
pub(crate) fn from_wire_create_object_access_url_response(
value: v1::CreateObjectAccessUrlResponse,
) -> CreateObjectAccessURLResponse {
CreateObjectAccessURLResponse {
url: value.url,
method: value.method,
expires_at: value.expires_at.map(from_wire_timestamp),
headers: value.headers,
}
}
pub(crate) fn to_wire_delete_object_request(value: DeleteObjectRequest) -> v1::DeleteObjectRequest {
v1::DeleteObjectRequest {
r#ref: value.r#ref.map(to_wire_s3_object_ref),
}
}
pub(crate) fn to_wire_head_object_request(value: HeadObjectRequest) -> v1::HeadObjectRequest {
v1::HeadObjectRequest {
r#ref: value.r#ref.map(to_wire_s3_object_ref),
}
}
pub(crate) fn from_wire_head_object_response(value: v1::HeadObjectResponse) -> HeadObjectResponse {
HeadObjectResponse {
meta: value.meta.map(from_wire_s3_object_meta),
}
}
pub(crate) fn to_wire_list_objects_request(value: ListObjectsRequest) -> v1::ListObjectsRequest {
v1::ListObjectsRequest {
prefix: value.prefix,
delimiter: value.delimiter,
continuation_token: value.continuation_token,
start_after: value.start_after,
max_keys: value.max_keys,
}
}
pub(crate) fn from_wire_list_objects_response(
value: v1::ListObjectsResponse,
) -> ListObjectsResponse {
ListObjectsResponse {
objects: value
.objects
.into_iter()
.map(from_wire_s3_object_meta)
.collect(),
common_prefixes: value.common_prefixes,
next_continuation_token: value.next_continuation_token,
has_more: value.has_more,
}
}
pub(crate) fn to_wire_presign_object_request(
value: PresignObjectRequest,
) -> v1::PresignObjectRequest {
v1::PresignObjectRequest {
r#ref: value.r#ref.map(to_wire_s3_object_ref),
method: value.method,
expires_seconds: value.expires_seconds,
content_type: value.content_type,
content_disposition: value.content_disposition,
headers: value.headers,
}
}
pub(crate) fn from_wire_presign_object_response(
value: v1::PresignObjectResponse,
) -> PresignObjectResponse {
PresignObjectResponse {
url: value.url,
method: value.method,
expires_at: value.expires_at.map(from_wire_timestamp),
headers: value.headers,
}
}
pub(crate) fn from_wire_read_object_chunk(value: v1::ReadObjectChunk) -> ReadObjectChunk {
ReadObjectChunk {
result: value.result.map(from_wire_read_object_chunk_result),
}
}
pub(crate) fn from_wire_read_object_chunk_result(
value: v1::read_object_chunk::Result,
) -> ReadObjectChunkResult {
match value {
v1::read_object_chunk::Result::Meta(value) => {
ReadObjectChunkResult::Meta(from_wire_s3_object_meta(value))
}
v1::read_object_chunk::Result::Data(value) => ReadObjectChunkResult::Data(value),
}
}
pub(crate) fn to_wire_read_object_request(value: ReadObjectRequest) -> v1::ReadObjectRequest {
v1::ReadObjectRequest {
r#ref: value.r#ref.map(to_wire_s3_object_ref),
range: value.range.map(to_wire_byte_range),
if_match: value.if_match,
if_none_match: value.if_none_match,
if_modified_since: value.if_modified_since.map(to_wire_timestamp),
if_unmodified_since: value.if_unmodified_since.map(to_wire_timestamp),
}
}
pub(crate) fn from_wire_s3_object_meta(value: v1::S3ObjectMeta) -> S3ObjectMeta {
S3ObjectMeta {
r#ref: value.r#ref.map(from_wire_s3_object_ref),
etag: value.etag,
size: value.size,
content_type: value.content_type,
last_modified: value.last_modified.map(from_wire_timestamp),
metadata: value.metadata,
storage_class: value.storage_class,
}
}
pub(crate) fn to_wire_s3_object_ref(value: S3ObjectRef) -> v1::S3ObjectRef {
v1::S3ObjectRef {
key: value.key,
version_id: value.version_id,
}
}
pub(crate) fn from_wire_s3_object_ref(value: v1::S3ObjectRef) -> S3ObjectRef {
S3ObjectRef {
key: value.key,
version_id: value.version_id,
}
}
pub(crate) fn to_wire_write_object_open(value: WriteObjectOpen) -> v1::WriteObjectOpen {
v1::WriteObjectOpen {
r#ref: value.r#ref.map(to_wire_s3_object_ref),
content_type: value.content_type,
cache_control: value.cache_control,
content_disposition: value.content_disposition,
content_encoding: value.content_encoding,
content_language: value.content_language,
metadata: value.metadata,
if_match: value.if_match,
if_none_match: value.if_none_match,
}
}
pub(crate) fn to_wire_write_object_request(value: WriteObjectRequest) -> v1::WriteObjectRequest {
v1::WriteObjectRequest {
msg: value.msg.map(to_wire_write_object_request_msg),
}
}
pub(crate) fn to_wire_write_object_request_msg(
value: WriteObjectRequestMsg,
) -> v1::write_object_request::Msg {
match value {
WriteObjectRequestMsg::Open(value) => {
v1::write_object_request::Msg::Open(to_wire_write_object_open(value))
}
WriteObjectRequestMsg::Data(value) => v1::write_object_request::Msg::Data(value),
}
}
pub(crate) fn from_wire_write_object_response(
value: v1::WriteObjectResponse,
) -> WriteObjectResponse {
WriteObjectResponse {
meta: value.meta.map(from_wire_s3_object_meta),
}
}