aws_sdk_iotsitewise/operation/
update_dataset.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `UpdateDataset`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct UpdateDataset;
6impl UpdateDataset {
7    /// Creates a new `UpdateDataset`
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::update_dataset::UpdateDatasetInput,
14    ) -> ::std::result::Result<
15        crate::operation::update_dataset::UpdateDatasetOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::update_dataset::UpdateDatasetError,
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::update_dataset::UpdateDatasetError>()
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::update_dataset::UpdateDatasetOutput>()
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::update_dataset::UpdateDatasetInput,
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("IoTSiteWise", "UpdateDataset", 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                "IoTSiteWise.UpdateDataset",
59                "rpc.service" = "IoTSiteWise",
60                "rpc.method" = "UpdateDataset",
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::update_dataset::UpdateDatasetInput = 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 UpdateDataset {
95    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
96        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("UpdateDataset");
97
98        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
99            UpdateDatasetRequestSerializer,
100        ));
101        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
102            UpdateDatasetResponseDeserializer,
103        ));
104
105        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
106            crate::config::auth::Params::builder()
107                .operation_name("UpdateDataset")
108                .build()
109                .expect("required fields set"),
110        ));
111
112        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
113            "UpdateDataset",
114            "IoTSiteWise",
115        ));
116        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
117        signing_options.double_uri_encode = true;
118        signing_options.content_sha256_header = false;
119        signing_options.normalize_uri_path = true;
120        signing_options.payload_override = None;
121
122        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
123            signing_options,
124            ..::std::default::Default::default()
125        });
126
127        ::std::option::Option::Some(cfg.freeze())
128    }
129
130    fn runtime_components(
131        &self,
132        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
133    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
134        #[allow(unused_mut)]
135        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("UpdateDataset")
136            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
137            .with_interceptor(UpdateDatasetEndpointParamsInterceptor)
138            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
139                crate::operation::update_dataset::UpdateDatasetError,
140            >::new())
141            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
142                crate::operation::update_dataset::UpdateDatasetError,
143            >::new())
144            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
145                crate::operation::update_dataset::UpdateDatasetError,
146            >::new());
147
148        ::std::borrow::Cow::Owned(rcb)
149    }
150}
151
152#[derive(Debug)]
153struct UpdateDatasetResponseDeserializer;
154impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for UpdateDatasetResponseDeserializer {
155    fn deserialize_nonstreaming(
156        &self,
157        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
158    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
159        let (success, status) = (response.status().is_success(), response.status().as_u16());
160        let headers = response.headers();
161        let body = response.body().bytes().expect("body loaded");
162        #[allow(unused_mut)]
163        let mut force_error = false;
164        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
165        let parse_result = if !success && status != 202 || force_error {
166            crate::protocol_serde::shape_update_dataset::de_update_dataset_http_error(status, headers, body)
167        } else {
168            crate::protocol_serde::shape_update_dataset::de_update_dataset_http_response(status, headers, body)
169        };
170        crate::protocol_serde::type_erase_result(parse_result)
171    }
172}
173#[derive(Debug)]
174struct UpdateDatasetRequestSerializer;
175impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for UpdateDatasetRequestSerializer {
176    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
177    fn serialize_input(
178        &self,
179        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
180        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
181    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
182        let input = input
183            .downcast::<crate::operation::update_dataset::UpdateDatasetInput>()
184            .expect("correct type");
185        let _header_serialization_settings = _cfg
186            .load::<crate::serialization_settings::HeaderSerializationSettings>()
187            .cloned()
188            .unwrap_or_default();
189        let mut request_builder = {
190            #[allow(clippy::uninlined_format_args)]
191            fn uri_base(
192                _input: &crate::operation::update_dataset::UpdateDatasetInput,
193                output: &mut ::std::string::String,
194            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
195                use ::std::fmt::Write as _;
196                let input_1 = &_input.dataset_id;
197                let input_1 = input_1
198                    .as_ref()
199                    .ok_or_else(|| ::aws_smithy_types::error::operation::BuildError::missing_field("dataset_id", "cannot be empty or unset"))?;
200                let dataset_id = ::aws_smithy_http::label::fmt_string(input_1, ::aws_smithy_http::label::EncodingStrategy::Default);
201                if dataset_id.is_empty() {
202                    return ::std::result::Result::Err(::aws_smithy_types::error::operation::BuildError::missing_field(
203                        "dataset_id",
204                        "cannot be empty or unset",
205                    ));
206                }
207                ::std::write!(output, "/datasets/{datasetId}", datasetId = dataset_id).expect("formatting should succeed");
208                ::std::result::Result::Ok(())
209            }
210            #[allow(clippy::unnecessary_wraps)]
211            fn update_http_builder(
212                input: &crate::operation::update_dataset::UpdateDatasetInput,
213                builder: ::http::request::Builder,
214            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
215                let mut uri = ::std::string::String::new();
216                uri_base(input, &mut uri)?;
217                ::std::result::Result::Ok(builder.method("PUT").uri(uri))
218            }
219            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
220            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/json");
221            builder
222        };
223        let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_update_dataset::ser_update_dataset_input(&input)?);
224        if let Some(content_length) = body.content_length() {
225            let content_length = content_length.to_string();
226            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
227        }
228        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
229    }
230}
231#[derive(Debug)]
232struct UpdateDatasetEndpointParamsInterceptor;
233
234impl ::aws_smithy_runtime_api::client::interceptors::Intercept for UpdateDatasetEndpointParamsInterceptor {
235    fn name(&self) -> &'static str {
236        "UpdateDatasetEndpointParamsInterceptor"
237    }
238
239    fn read_before_execution(
240        &self,
241        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
242            '_,
243            ::aws_smithy_runtime_api::client::interceptors::context::Input,
244            ::aws_smithy_runtime_api::client::interceptors::context::Output,
245            ::aws_smithy_runtime_api::client::interceptors::context::Error,
246        >,
247        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
248    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
249        let _input = context
250            .input()
251            .downcast_ref::<UpdateDatasetInput>()
252            .ok_or("failed to downcast to UpdateDatasetInput")?;
253
254        let endpoint_prefix = ::aws_smithy_runtime_api::client::endpoint::EndpointPrefix::new("api.").map_err(|err| {
255            ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint prefix could not be built", err)
256        })?;
257        cfg.interceptor_state().store_put(endpoint_prefix);
258
259        let params = crate::config::endpoint::Params::builder()
260            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
261            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
262            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
263            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
264            .build()
265            .map_err(|err| {
266                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
267            })?;
268        cfg.interceptor_state()
269            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
270        ::std::result::Result::Ok(())
271    }
272}
273
274// The get_* functions below are generated from JMESPath expressions in the
275// operationContextParams trait. They target the operation's input shape.
276
277/// Error type for the `UpdateDatasetError` operation.
278#[non_exhaustive]
279#[derive(::std::fmt::Debug)]
280pub enum UpdateDatasetError {
281    /// <p>Your request has conflicting operations. This can occur if you're trying to perform more than one operation on the same resource at the same time.</p>
282    ConflictingOperationException(crate::types::error::ConflictingOperationException),
283    /// <p>IoT SiteWise can't process your request right now. Try again later.</p>
284    InternalFailureException(crate::types::error::InternalFailureException),
285    /// <p>The request isn't valid. This can occur if your request contains malformed JSON or unsupported characters. Check your request and try again.</p>
286    InvalidRequestException(crate::types::error::InvalidRequestException),
287    /// <p>You've reached the quota for a resource. For example, this can occur if you're trying to associate more than the allowed number of child assets or attempting to create more than the allowed number of properties for an asset model.</p>
288    /// <p>For more information, see <a href="https://docs.aws.amazon.com/iot-sitewise/latest/userguide/quotas.html">Quotas</a> in the <i>IoT SiteWise User Guide</i>.</p>
289    LimitExceededException(crate::types::error::LimitExceededException),
290    /// <p>The requested resource can't be found.</p>
291    ResourceNotFoundException(crate::types::error::ResourceNotFoundException),
292    /// <p>Your request exceeded a rate limit. For example, you might have exceeded the number of IoT SiteWise assets that can be created per second, the allowed number of messages per second, and so on.</p>
293    /// <p>For more information, see <a href="https://docs.aws.amazon.com/iot-sitewise/latest/userguide/quotas.html">Quotas</a> in the <i>IoT SiteWise User Guide</i>.</p>
294    ThrottlingException(crate::types::error::ThrottlingException),
295    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
296    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
297    variable wildcard pattern and check `.code()`:
298     \
299    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
300     \
301    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-UpdateDatasetError) for what information is available for the error.")]
302    Unhandled(crate::error::sealed_unhandled::Unhandled),
303}
304impl UpdateDatasetError {
305    /// Creates the `UpdateDatasetError::Unhandled` variant from any error type.
306    pub fn unhandled(
307        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
308    ) -> Self {
309        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
310            source: err.into(),
311            meta: ::std::default::Default::default(),
312        })
313    }
314
315    /// Creates the `UpdateDatasetError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
316    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
317        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
318            source: err.clone().into(),
319            meta: err,
320        })
321    }
322    ///
323    /// Returns error metadata, which includes the error code, message,
324    /// request ID, and potentially additional information.
325    ///
326    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
327        match self {
328            Self::ConflictingOperationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
329            Self::InternalFailureException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
330            Self::InvalidRequestException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
331            Self::LimitExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
332            Self::ResourceNotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
333            Self::ThrottlingException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
334            Self::Unhandled(e) => &e.meta,
335        }
336    }
337    /// Returns `true` if the error kind is `UpdateDatasetError::ConflictingOperationException`.
338    pub fn is_conflicting_operation_exception(&self) -> bool {
339        matches!(self, Self::ConflictingOperationException(_))
340    }
341    /// Returns `true` if the error kind is `UpdateDatasetError::InternalFailureException`.
342    pub fn is_internal_failure_exception(&self) -> bool {
343        matches!(self, Self::InternalFailureException(_))
344    }
345    /// Returns `true` if the error kind is `UpdateDatasetError::InvalidRequestException`.
346    pub fn is_invalid_request_exception(&self) -> bool {
347        matches!(self, Self::InvalidRequestException(_))
348    }
349    /// Returns `true` if the error kind is `UpdateDatasetError::LimitExceededException`.
350    pub fn is_limit_exceeded_exception(&self) -> bool {
351        matches!(self, Self::LimitExceededException(_))
352    }
353    /// Returns `true` if the error kind is `UpdateDatasetError::ResourceNotFoundException`.
354    pub fn is_resource_not_found_exception(&self) -> bool {
355        matches!(self, Self::ResourceNotFoundException(_))
356    }
357    /// Returns `true` if the error kind is `UpdateDatasetError::ThrottlingException`.
358    pub fn is_throttling_exception(&self) -> bool {
359        matches!(self, Self::ThrottlingException(_))
360    }
361}
362impl ::std::error::Error for UpdateDatasetError {
363    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
364        match self {
365            Self::ConflictingOperationException(_inner) => ::std::option::Option::Some(_inner),
366            Self::InternalFailureException(_inner) => ::std::option::Option::Some(_inner),
367            Self::InvalidRequestException(_inner) => ::std::option::Option::Some(_inner),
368            Self::LimitExceededException(_inner) => ::std::option::Option::Some(_inner),
369            Self::ResourceNotFoundException(_inner) => ::std::option::Option::Some(_inner),
370            Self::ThrottlingException(_inner) => ::std::option::Option::Some(_inner),
371            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
372        }
373    }
374}
375impl ::std::fmt::Display for UpdateDatasetError {
376    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
377        match self {
378            Self::ConflictingOperationException(_inner) => _inner.fmt(f),
379            Self::InternalFailureException(_inner) => _inner.fmt(f),
380            Self::InvalidRequestException(_inner) => _inner.fmt(f),
381            Self::LimitExceededException(_inner) => _inner.fmt(f),
382            Self::ResourceNotFoundException(_inner) => _inner.fmt(f),
383            Self::ThrottlingException(_inner) => _inner.fmt(f),
384            Self::Unhandled(_inner) => {
385                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
386                    write!(f, "unhandled error ({code})")
387                } else {
388                    f.write_str("unhandled error")
389                }
390            }
391        }
392    }
393}
394impl ::aws_smithy_types::retry::ProvideErrorKind for UpdateDatasetError {
395    fn code(&self) -> ::std::option::Option<&str> {
396        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
397    }
398    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
399        ::std::option::Option::None
400    }
401}
402impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for UpdateDatasetError {
403    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
404        match self {
405            Self::ConflictingOperationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
406            Self::InternalFailureException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
407            Self::InvalidRequestException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
408            Self::LimitExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
409            Self::ResourceNotFoundException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
410            Self::ThrottlingException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
411            Self::Unhandled(_inner) => &_inner.meta,
412        }
413    }
414}
415impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for UpdateDatasetError {
416    fn create_unhandled_error(
417        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
418        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
419    ) -> Self {
420        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
421            source,
422            meta: meta.unwrap_or_default(),
423        })
424    }
425}
426impl ::aws_types::request_id::RequestId for crate::operation::update_dataset::UpdateDatasetError {
427    fn request_id(&self) -> Option<&str> {
428        self.meta().request_id()
429    }
430}
431
432pub use crate::operation::update_dataset::_update_dataset_output::UpdateDatasetOutput;
433
434pub use crate::operation::update_dataset::_update_dataset_input::UpdateDatasetInput;
435
436mod _update_dataset_input;
437
438mod _update_dataset_output;
439
440/// Builders
441pub mod builders;