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