aws_sdk_s3/operation/
rename_object.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `RenameObject`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct RenameObject;
6impl RenameObject {
7    /// Creates a new `RenameObject`
8    pub fn new() -> Self {
9        Self
10    }
11    pub(crate) async fn orchestrate(
12        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
13        input: crate::operation::rename_object::RenameObjectInput,
14    ) -> ::std::result::Result<
15        crate::operation::rename_object::RenameObjectOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::rename_object::RenameObjectError,
18            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
19        >,
20    > {
21        let map_err = |err: ::aws_smithy_runtime_api::client::result::SdkError<
22            ::aws_smithy_runtime_api::client::interceptors::context::Error,
23            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
24        >| {
25            err.map_service_error(|err| {
26                err.downcast::<crate::operation::rename_object::RenameObjectError>()
27                    .expect("correct error type")
28            })
29        };
30        let context = Self::orchestrate_with_stop_point(runtime_plugins, input, ::aws_smithy_runtime::client::orchestrator::StopPoint::None)
31            .await
32            .map_err(map_err)?;
33        let output = context.finalize().map_err(map_err)?;
34        ::std::result::Result::Ok(
35            output
36                .downcast::<crate::operation::rename_object::RenameObjectOutput>()
37                .expect("correct output type"),
38        )
39    }
40
41    pub(crate) async fn orchestrate_with_stop_point(
42        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
43        input: crate::operation::rename_object::RenameObjectInput,
44        stop_point: ::aws_smithy_runtime::client::orchestrator::StopPoint,
45    ) -> ::std::result::Result<
46        ::aws_smithy_runtime_api::client::interceptors::context::InterceptorContext,
47        ::aws_smithy_runtime_api::client::result::SdkError<
48            ::aws_smithy_runtime_api::client::interceptors::context::Error,
49            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
50        >,
51    > {
52        let input = ::aws_smithy_runtime_api::client::interceptors::context::Input::erase(input);
53        use ::tracing::Instrument;
54        ::aws_smithy_runtime::client::orchestrator::invoke_with_stop_point("S3", "RenameObject", input, runtime_plugins, stop_point)
55            // Create a parent span for the entire operation. Includes a random, internal-only,
56            // seven-digit ID for the operation orchestration so that it can be correlated in the logs.
57            .instrument(::tracing::debug_span!(
58                "S3.RenameObject",
59                "rpc.service" = "S3",
60                "rpc.method" = "RenameObject",
61                "sdk_invocation_id" = ::fastrand::u32(1_000_000..10_000_000),
62                "rpc.system" = "aws-api",
63            ))
64            .await
65    }
66
67    pub(crate) fn operation_runtime_plugins(
68        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
69        client_config: &crate::config::Config,
70        config_override: ::std::option::Option<crate::config::Builder>,
71    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
72        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
73        runtime_plugins = runtime_plugins.with_operation_plugin(crate::client_idempotency_token::IdempotencyTokenRuntimePlugin::new(
74            |token_provider, input| {
75                let input: &mut crate::operation::rename_object::RenameObjectInput = input.downcast_mut().expect("correct type");
76                if input.client_token.is_none() {
77                    input.client_token = ::std::option::Option::Some(token_provider.make_idempotency_token());
78                }
79            },
80        ));
81        if let ::std::option::Option::Some(config_override) = config_override {
82            for plugin in config_override.runtime_plugins.iter().cloned() {
83                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
84            }
85            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
86                config_override,
87                client_config.config.clone(),
88                &client_config.runtime_components,
89            ));
90        }
91        runtime_plugins
92    }
93}
94impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for RenameObject {
95    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
96        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("RenameObject");
97
98        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
99            RenameObjectRequestSerializer,
100        ));
101        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
102            RenameObjectResponseDeserializer,
103        ));
104
105        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
106            crate::config::auth::Params::builder()
107                .operation_name("RenameObject")
108                .build()
109                .expect("required fields set"),
110        ));
111
112        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new("RenameObject", "S3"));
113        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
114        signing_options.double_uri_encode = false;
115        signing_options.content_sha256_header = true;
116        signing_options.normalize_uri_path = false;
117        signing_options.payload_override = None;
118
119        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
120            signing_options,
121            ..::std::default::Default::default()
122        });
123
124        ::std::option::Option::Some(cfg.freeze())
125    }
126
127    fn runtime_components(
128        &self,
129        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
130    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
131        #[allow(unused_mut)]
132        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("RenameObject")
133            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
134            .with_interceptor(RenameObjectEndpointParamsInterceptor)
135            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
136                crate::operation::rename_object::RenameObjectError,
137            >::new())
138            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
139                crate::operation::rename_object::RenameObjectError,
140            >::new())
141            .with_retry_classifier(
142                ::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<crate::operation::rename_object::RenameObjectError>::builder()
143                    .transient_errors({
144                        let mut transient_errors: Vec<&'static str> = ::aws_runtime::retries::classifiers::TRANSIENT_ERRORS.into();
145                        transient_errors.push("InternalError");
146                        ::std::borrow::Cow::Owned(transient_errors)
147                    })
148                    .build(),
149            );
150
151        ::std::borrow::Cow::Owned(rcb)
152    }
153}
154
155#[derive(Debug)]
156struct RenameObjectResponseDeserializer;
157impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for RenameObjectResponseDeserializer {
158    fn deserialize_nonstreaming(
159        &self,
160        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
161    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
162        let (success, status) = (response.status().is_success(), response.status().as_u16());
163        let headers = response.headers();
164        let body = response.body().bytes().expect("body loaded");
165        #[allow(unused_mut)]
166        let mut force_error = false;
167        ::tracing::debug!(extended_request_id = ?crate::s3_request_id::RequestIdExt::extended_request_id(response));
168        if matches!(crate::rest_xml_unwrapped_errors::body_is_error(body), Ok(true)) {
169            force_error = true;
170        }
171        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
172        let parse_result = if !success && status != 200 || force_error {
173            crate::protocol_serde::shape_rename_object::de_rename_object_http_error(status, headers, body)
174        } else {
175            crate::protocol_serde::shape_rename_object::de_rename_object_http_response(status, headers, body)
176        };
177        crate::protocol_serde::type_erase_result(parse_result)
178    }
179}
180#[derive(Debug)]
181struct RenameObjectRequestSerializer;
182impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for RenameObjectRequestSerializer {
183    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
184    fn serialize_input(
185        &self,
186        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
187        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
188    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
189        let input = input
190            .downcast::<crate::operation::rename_object::RenameObjectInput>()
191            .expect("correct type");
192        let _header_serialization_settings = _cfg
193            .load::<crate::serialization_settings::HeaderSerializationSettings>()
194            .cloned()
195            .unwrap_or_default();
196        let mut request_builder = {
197            fn uri_base(
198                _input: &crate::operation::rename_object::RenameObjectInput,
199                output: &mut ::std::string::String,
200            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
201                use ::std::fmt::Write as _;
202                let input_1 = &_input.key;
203                let input_1 = input_1
204                    .as_ref()
205                    .ok_or_else(|| ::aws_smithy_types::error::operation::BuildError::missing_field("key", "cannot be empty or unset"))?;
206                let key = ::aws_smithy_http::label::fmt_string(input_1, ::aws_smithy_http::label::EncodingStrategy::Greedy);
207                if key.is_empty() {
208                    return ::std::result::Result::Err(::aws_smithy_types::error::operation::BuildError::missing_field(
209                        "key",
210                        "cannot be empty or unset",
211                    ));
212                }
213                ::std::write!(output, "/{Key}", Key = key).expect("formatting should succeed");
214                ::std::result::Result::Ok(())
215            }
216            fn uri_query(
217                _input: &crate::operation::rename_object::RenameObjectInput,
218                mut output: &mut ::std::string::String,
219            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
220                let mut query = ::aws_smithy_http::query::Writer::new(output);
221                query.push_v("renameObject");
222                ::std::result::Result::Ok(())
223            }
224            #[allow(clippy::unnecessary_wraps)]
225            fn update_http_builder(
226                input: &crate::operation::rename_object::RenameObjectInput,
227                builder: ::http::request::Builder,
228            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
229                let mut uri = ::std::string::String::new();
230                uri_base(input, &mut uri)?;
231                uri_query(input, &mut uri)?;
232                let builder = crate::protocol_serde::shape_rename_object::ser_rename_object_headers(input, builder)?;
233                ::std::result::Result::Ok(builder.method("PUT").uri(uri))
234            }
235            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
236            builder
237        };
238        let body = ::aws_smithy_types::body::SdkBody::from("");
239
240        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
241    }
242}
243#[derive(Debug)]
244struct RenameObjectEndpointParamsInterceptor;
245
246impl ::aws_smithy_runtime_api::client::interceptors::Intercept for RenameObjectEndpointParamsInterceptor {
247    fn name(&self) -> &'static str {
248        "RenameObjectEndpointParamsInterceptor"
249    }
250
251    fn read_before_execution(
252        &self,
253        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
254            '_,
255            ::aws_smithy_runtime_api::client::interceptors::context::Input,
256            ::aws_smithy_runtime_api::client::interceptors::context::Output,
257            ::aws_smithy_runtime_api::client::interceptors::context::Error,
258        >,
259        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
260    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
261        let _input = context
262            .input()
263            .downcast_ref::<RenameObjectInput>()
264            .ok_or("failed to downcast to RenameObjectInput")?;
265
266        let params = crate::config::endpoint::Params::builder()
267            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
268            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
269            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
270            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
271            .set_force_path_style(cfg.load::<crate::config::ForcePathStyle>().map(|ty| ty.0))
272            .set_use_arn_region(cfg.load::<crate::config::UseArnRegion>().map(|ty| ty.0))
273            .set_disable_multi_region_access_points(cfg.load::<crate::config::DisableMultiRegionAccessPoints>().map(|ty| ty.0))
274            .set_accelerate(cfg.load::<crate::config::Accelerate>().map(|ty| ty.0))
275            .set_disable_s3_express_session_auth(cfg.load::<crate::config::DisableS3ExpressSessionAuth>().map(|ty| ty.0))
276            .set_bucket(Some(
277                _input
278                    .bucket
279                    .clone()
280                    .filter(|f| !AsRef::<str>::as_ref(f).trim().is_empty())
281                    .ok_or_else(|| ::aws_smithy_types::error::operation::BuildError::missing_field("bucket", "A required field was not set"))?,
282            ))
283            .set_key(Some(
284                _input
285                    .key
286                    .clone()
287                    .filter(|f| !AsRef::<str>::as_ref(f).trim().is_empty())
288                    .ok_or_else(|| ::aws_smithy_types::error::operation::BuildError::missing_field("key", "A required field was not set"))?,
289            ))
290            .build()
291            .map_err(|err| {
292                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
293            })?;
294        cfg.interceptor_state()
295            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
296        ::std::result::Result::Ok(())
297    }
298}
299
300// The get_* functions below are generated from JMESPath expressions in the
301// operationContextParams trait. They target the operation's input shape.
302
303/// Error type for the `RenameObjectError` operation.
304#[non_exhaustive]
305#[derive(::std::fmt::Debug)]
306pub enum RenameObjectError {
307    /// <p>Parameters on this idempotent request are inconsistent with parameters used in previous request(s).</p>
308    /// <p>For a list of error codes and more information on Amazon S3 errors, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList">Error codes</a>.</p><note>
309    /// <p>Idempotency ensures that an API request completes no more than one time. With an idempotent request, if the original request completes successfully, any subsequent retries complete successfully without performing any further actions.</p>
310    /// </note>
311    IdempotencyParameterMismatch(crate::types::error::IdempotencyParameterMismatch),
312    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
313    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
314    variable wildcard pattern and check `.code()`:
315     \
316    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
317     \
318    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-RenameObjectError) for what information is available for the error.")]
319    Unhandled(crate::error::sealed_unhandled::Unhandled),
320}
321impl RenameObjectError {
322    /// Creates the `RenameObjectError::Unhandled` variant from any error type.
323    pub fn unhandled(
324        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
325    ) -> Self {
326        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
327            source: err.into(),
328            meta: ::std::default::Default::default(),
329        })
330    }
331
332    /// Creates the `RenameObjectError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
333    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
334        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
335            source: err.clone().into(),
336            meta: err,
337        })
338    }
339    ///
340    /// Returns error metadata, which includes the error code, message,
341    /// request ID, and potentially additional information.
342    ///
343    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
344        match self {
345            Self::IdempotencyParameterMismatch(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
346            Self::Unhandled(e) => &e.meta,
347        }
348    }
349    /// Returns `true` if the error kind is `RenameObjectError::IdempotencyParameterMismatch`.
350    pub fn is_idempotency_parameter_mismatch(&self) -> bool {
351        matches!(self, Self::IdempotencyParameterMismatch(_))
352    }
353}
354impl ::std::error::Error for RenameObjectError {
355    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
356        match self {
357            Self::IdempotencyParameterMismatch(_inner) => ::std::option::Option::Some(_inner),
358            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
359        }
360    }
361}
362impl ::std::fmt::Display for RenameObjectError {
363    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
364        match self {
365            Self::IdempotencyParameterMismatch(_inner) => _inner.fmt(f),
366            Self::Unhandled(_inner) => {
367                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
368                    write!(f, "unhandled error ({code})")
369                } else {
370                    f.write_str("unhandled error")
371                }
372            }
373        }
374    }
375}
376impl ::aws_smithy_types::retry::ProvideErrorKind for RenameObjectError {
377    fn code(&self) -> ::std::option::Option<&str> {
378        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
379    }
380    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
381        ::std::option::Option::None
382    }
383}
384impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for RenameObjectError {
385    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
386        match self {
387            Self::IdempotencyParameterMismatch(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
388            Self::Unhandled(_inner) => &_inner.meta,
389        }
390    }
391}
392impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for RenameObjectError {
393    fn create_unhandled_error(
394        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
395        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
396    ) -> Self {
397        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
398            source,
399            meta: meta.unwrap_or_default(),
400        })
401    }
402}
403impl crate::s3_request_id::RequestIdExt for crate::operation::rename_object::RenameObjectError {
404    fn extended_request_id(&self) -> Option<&str> {
405        self.meta().extended_request_id()
406    }
407}
408impl ::aws_types::request_id::RequestId for crate::operation::rename_object::RenameObjectError {
409    fn request_id(&self) -> Option<&str> {
410        self.meta().request_id()
411    }
412}
413
414pub use crate::operation::rename_object::_rename_object_output::RenameObjectOutput;
415
416pub use crate::operation::rename_object::_rename_object_input::RenameObjectInput;
417
418mod _rename_object_input;
419
420mod _rename_object_output;
421
422/// Builders
423pub mod builders;