aws_sdk_s3/protocol_serde/
shape_get_object_attributes.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2#[allow(clippy::unnecessary_wraps)]
3pub fn de_get_object_attributes_http_error(
4    _response_status: u16,
5    _response_headers: &::aws_smithy_runtime_api::http::Headers,
6    _response_body: &[u8],
7) -> std::result::Result<
8    crate::operation::get_object_attributes::GetObjectAttributesOutput,
9    crate::operation::get_object_attributes::GetObjectAttributesError,
10> {
11    #[allow(unused_mut)]
12    let mut generic_builder = crate::protocol_serde::parse_http_error_metadata(_response_status, _response_headers, _response_body)
13        .map_err(crate::operation::get_object_attributes::GetObjectAttributesError::unhandled)?;
14    generic_builder = crate::s3_request_id::apply_extended_request_id(generic_builder, _response_headers);
15    generic_builder = ::aws_types::request_id::apply_request_id(generic_builder, _response_headers);
16    let generic = generic_builder.build();
17    let error_code = match generic.code() {
18        Some(code) => code,
19        None => return Err(crate::operation::get_object_attributes::GetObjectAttributesError::unhandled(generic)),
20    };
21
22    let _error_message = generic.message().map(|msg| msg.to_owned());
23    Err(match error_code {
24        "NoSuchKey" => crate::operation::get_object_attributes::GetObjectAttributesError::NoSuchKey({
25            #[allow(unused_mut)]
26            let mut tmp = {
27                #[allow(unused_mut)]
28                let mut output = crate::types::error::builders::NoSuchKeyBuilder::default();
29                output = crate::protocol_serde::shape_no_such_key::de_no_such_key_xml_err(_response_body, output)
30                    .map_err(crate::operation::get_object_attributes::GetObjectAttributesError::unhandled)?;
31                let output = output.meta(generic);
32                output.build()
33            };
34            if tmp.message.is_none() {
35                tmp.message = _error_message;
36            }
37            tmp
38        }),
39        _ => crate::operation::get_object_attributes::GetObjectAttributesError::generic(generic),
40    })
41}
42
43#[allow(clippy::unnecessary_wraps)]
44pub fn de_get_object_attributes_http_response(
45    _response_status: u16,
46    _response_headers: &::aws_smithy_runtime_api::http::Headers,
47    _response_body: &[u8],
48) -> std::result::Result<
49    crate::operation::get_object_attributes::GetObjectAttributesOutput,
50    crate::operation::get_object_attributes::GetObjectAttributesError,
51> {
52    Ok({
53        #[allow(unused_mut)]
54        let mut output = crate::operation::get_object_attributes::builders::GetObjectAttributesOutputBuilder::default();
55        output = crate::protocol_serde::shape_get_object_attributes::de_get_object_attributes(_response_body, output)
56            .map_err(crate::operation::get_object_attributes::GetObjectAttributesError::unhandled)?;
57        output = output.set_delete_marker(
58            crate::protocol_serde::shape_get_object_attributes_output::de_delete_marker_header(_response_headers).map_err(|_| {
59                crate::operation::get_object_attributes::GetObjectAttributesError::unhandled(
60                    "Failed to parse DeleteMarker from header `x-amz-delete-marker",
61                )
62            })?,
63        );
64        output = output.set_last_modified(
65            crate::protocol_serde::shape_get_object_attributes_output::de_last_modified_header(_response_headers).map_err(|_| {
66                crate::operation::get_object_attributes::GetObjectAttributesError::unhandled(
67                    "Failed to parse LastModified from header `Last-Modified",
68                )
69            })?,
70        );
71        output = output.set_request_charged(
72            crate::protocol_serde::shape_get_object_attributes_output::de_request_charged_header(_response_headers).map_err(|_| {
73                crate::operation::get_object_attributes::GetObjectAttributesError::unhandled(
74                    "Failed to parse RequestCharged from header `x-amz-request-charged",
75                )
76            })?,
77        );
78        output = output.set_version_id(
79            crate::protocol_serde::shape_get_object_attributes_output::de_version_id_header(_response_headers).map_err(|_| {
80                crate::operation::get_object_attributes::GetObjectAttributesError::unhandled(
81                    "Failed to parse VersionId from header `x-amz-version-id",
82                )
83            })?,
84        );
85        output._set_extended_request_id(crate::s3_request_id::RequestIdExt::extended_request_id(_response_headers).map(str::to_string));
86        output._set_request_id(::aws_types::request_id::RequestId::request_id(_response_headers).map(str::to_string));
87        output.build()
88    })
89}
90
91pub fn ser_get_object_attributes_headers(
92    input: &crate::operation::get_object_attributes::GetObjectAttributesInput,
93    mut builder: ::http::request::Builder,
94) -> std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
95    if let ::std::option::Option::Some(inner_1) = &input.max_parts {
96        let mut encoder = ::aws_smithy_types::primitive::Encoder::from(*inner_1);
97        let formatted_2 = encoder.encode();
98        let header_value = formatted_2;
99        let header_value: ::http::HeaderValue = header_value.parse().map_err(|err| {
100            ::aws_smithy_types::error::operation::BuildError::invalid_field(
101                "max_parts",
102                format!("`{}` cannot be used as a header value: {}", &header_value, err),
103            )
104        })?;
105        builder = builder.header("x-amz-max-parts", header_value);
106    }
107    if let ::std::option::Option::Some(inner_3) = &input.part_number_marker {
108        let formatted_4 = inner_3.as_str();
109        let header_value = formatted_4;
110        let header_value: ::http::HeaderValue = header_value.parse().map_err(|err| {
111            ::aws_smithy_types::error::operation::BuildError::invalid_field(
112                "part_number_marker",
113                format!("`{}` cannot be used as a header value: {}", &header_value, err),
114            )
115        })?;
116        builder = builder.header("x-amz-part-number-marker", header_value);
117    }
118    if let ::std::option::Option::Some(inner_5) = &input.sse_customer_algorithm {
119        let formatted_6 = inner_5.as_str();
120        let header_value = formatted_6;
121        let header_value: ::http::HeaderValue = header_value.parse().map_err(|err| {
122            ::aws_smithy_types::error::operation::BuildError::invalid_field(
123                "sse_customer_algorithm",
124                format!("`{}` cannot be used as a header value: {}", &header_value, err),
125            )
126        })?;
127        builder = builder.header("x-amz-server-side-encryption-customer-algorithm", header_value);
128    }
129    if let ::std::option::Option::Some(inner_7) = &input.sse_customer_key {
130        let formatted_8 = inner_7.as_str();
131        let header_value = formatted_8;
132        let header_value: ::http::HeaderValue = header_value.parse().map_err(|err| {
133            ::aws_smithy_types::error::operation::BuildError::invalid_field(
134                "sse_customer_key",
135                format!("`{}` cannot be used as a header value: {}", &"*** Sensitive Data Redacted ***", err),
136            )
137        })?;
138        builder = builder.header("x-amz-server-side-encryption-customer-key", header_value);
139    }
140    if let ::std::option::Option::Some(inner_9) = &input.sse_customer_key_md5 {
141        let formatted_10 = inner_9.as_str();
142        let header_value = formatted_10;
143        let header_value: ::http::HeaderValue = header_value.parse().map_err(|err| {
144            ::aws_smithy_types::error::operation::BuildError::invalid_field(
145                "sse_customer_key_md5",
146                format!("`{}` cannot be used as a header value: {}", &header_value, err),
147            )
148        })?;
149        builder = builder.header("x-amz-server-side-encryption-customer-key-MD5", header_value);
150    }
151    if let ::std::option::Option::Some(inner_11) = &input.request_payer {
152        let formatted_12 = inner_11.as_str();
153        let header_value = formatted_12;
154        let header_value: ::http::HeaderValue = header_value.parse().map_err(|err| {
155            ::aws_smithy_types::error::operation::BuildError::invalid_field(
156                "request_payer",
157                format!("`{}` cannot be used as a header value: {}", &header_value, err),
158            )
159        })?;
160        builder = builder.header("x-amz-request-payer", header_value);
161    }
162    if let ::std::option::Option::Some(inner_13) = &input.expected_bucket_owner {
163        let formatted_14 = inner_13.as_str();
164        let header_value = formatted_14;
165        let header_value: ::http::HeaderValue = header_value.parse().map_err(|err| {
166            ::aws_smithy_types::error::operation::BuildError::invalid_field(
167                "expected_bucket_owner",
168                format!("`{}` cannot be used as a header value: {}", &header_value, err),
169            )
170        })?;
171        builder = builder.header("x-amz-expected-bucket-owner", header_value);
172    }
173    if let ::std::option::Option::Some(inner_15) = &input.object_attributes {
174        // Empty vec in header is serialized as an empty string
175        if inner_15.is_empty() {
176            builder = builder.header("x-amz-object-attributes", "");
177        } else {
178            for inner_16 in inner_15 {
179                let formatted_17 = ::aws_smithy_http::header::quote_header_value(inner_16.as_str());
180                let header_value = formatted_17;
181                let header_value: ::http::HeaderValue = header_value.parse().map_err(|err| {
182                    ::aws_smithy_types::error::operation::BuildError::invalid_field(
183                        "object_attributes",
184                        format!("`{}` cannot be used as a header value: {}", &header_value, err),
185                    )
186                })?;
187                builder = builder.header("x-amz-object-attributes", header_value);
188            }
189        }
190    }
191    Ok(builder)
192}
193
194#[allow(unused_mut)]
195pub fn de_get_object_attributes(
196    inp: &[u8],
197    mut builder: crate::operation::get_object_attributes::builders::GetObjectAttributesOutputBuilder,
198) -> std::result::Result<crate::operation::get_object_attributes::builders::GetObjectAttributesOutputBuilder, ::aws_smithy_xml::decode::XmlDecodeError>
199{
200    let mut doc = ::aws_smithy_xml::decode::Document::try_from(inp)?;
201
202    #[allow(unused_mut)]
203    let mut decoder = doc.root_element()?;
204    #[allow(unused_variables)]
205    let start_el = decoder.start_el();
206    while let Some(mut tag) = decoder.next_tag() {
207        match tag.start_el() {
208            s if s.matches("ETag") /* ETag com.amazonaws.s3.synthetic#GetObjectAttributesOutput$ETag */ =>  {
209                let var_18 =
210                    Some(
211                        Result::<::std::string::String, ::aws_smithy_xml::decode::XmlDecodeError>::Ok(
212                            ::aws_smithy_xml::decode::try_data(&mut tag)?.as_ref()
213                            .into()
214                        )
215                        ?
216                    )
217                ;
218                builder = builder.set_e_tag(var_18);
219            }
220            ,
221            s if s.matches("Checksum") /* Checksum com.amazonaws.s3.synthetic#GetObjectAttributesOutput$Checksum */ =>  {
222                let var_19 =
223                    Some(
224                        crate::protocol_serde::shape_checksum::de_checksum(&mut tag)
225                        ?
226                    )
227                ;
228                builder = builder.set_checksum(var_19);
229            }
230            ,
231            s if s.matches("StorageClass") /* StorageClass com.amazonaws.s3.synthetic#GetObjectAttributesOutput$StorageClass */ =>  {
232                let var_20 =
233                    Some(
234                        Result::<crate::types::StorageClass, ::aws_smithy_xml::decode::XmlDecodeError>::Ok(
235                            crate::types::StorageClass::from(
236                                ::aws_smithy_xml::decode::try_data(&mut tag)?.as_ref()
237                            )
238                        )
239                        ?
240                    )
241                ;
242                builder = builder.set_storage_class(var_20);
243            }
244            ,
245            s if s.matches("ObjectSize") /* ObjectSize com.amazonaws.s3.synthetic#GetObjectAttributesOutput$ObjectSize */ =>  {
246                let var_21 =
247                    Some(
248                         {
249                            <i64 as ::aws_smithy_types::primitive::Parse>::parse_smithy_primitive(
250                                ::aws_smithy_xml::decode::try_data(&mut tag)?.as_ref()
251                            )
252                            .map_err(|_|::aws_smithy_xml::decode::XmlDecodeError::custom("expected (long: `com.amazonaws.s3#ObjectSize`)"))
253                        }
254                        ?
255                    )
256                ;
257                builder = builder.set_object_size(var_21);
258            }
259            ,
260            s if s.matches("ObjectParts") /* ObjectParts com.amazonaws.s3.synthetic#GetObjectAttributesOutput$ObjectParts */ =>  {
261                let var_22 =
262                    Some(
263                        crate::protocol_serde::shape_get_object_attributes_parts::de_get_object_attributes_parts(&mut tag)
264                        ?
265                    )
266                ;
267                builder = builder.set_object_parts(var_22);
268            }
269            ,
270            _ => {}
271        }
272    }
273    Ok(builder)
274}