aws_sdk_iotsitewise/operation/
put_asset_model_interface_relationship.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `PutAssetModelInterfaceRelationship`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct PutAssetModelInterfaceRelationship;
6impl PutAssetModelInterfaceRelationship {
7    /// Creates a new `PutAssetModelInterfaceRelationship`
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::put_asset_model_interface_relationship::PutAssetModelInterfaceRelationshipInput,
14    ) -> ::std::result::Result<
15        crate::operation::put_asset_model_interface_relationship::PutAssetModelInterfaceRelationshipOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::put_asset_model_interface_relationship::PutAssetModelInterfaceRelationshipError,
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::put_asset_model_interface_relationship::PutAssetModelInterfaceRelationshipError>()
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::put_asset_model_interface_relationship::PutAssetModelInterfaceRelationshipOutput>()
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::put_asset_model_interface_relationship::PutAssetModelInterfaceRelationshipInput,
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(
55            "IoTSiteWise",
56            "PutAssetModelInterfaceRelationship",
57            input,
58            runtime_plugins,
59            stop_point,
60        )
61        // Create a parent span for the entire operation. Includes a random, internal-only,
62        // seven-digit ID for the operation orchestration so that it can be correlated in the logs.
63        .instrument(::tracing::debug_span!(
64            "IoTSiteWise.PutAssetModelInterfaceRelationship",
65            "rpc.service" = "IoTSiteWise",
66            "rpc.method" = "PutAssetModelInterfaceRelationship",
67            "sdk_invocation_id" = ::fastrand::u32(1_000_000..10_000_000),
68            "rpc.system" = "aws-api",
69        ))
70        .await
71    }
72
73    pub(crate) fn operation_runtime_plugins(
74        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
75        client_config: &crate::config::Config,
76        config_override: ::std::option::Option<crate::config::Builder>,
77    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
78        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
79        runtime_plugins = runtime_plugins.with_operation_plugin(crate::client_idempotency_token::IdempotencyTokenRuntimePlugin::new(
80            |token_provider, input| {
81                let input: &mut crate::operation::put_asset_model_interface_relationship::PutAssetModelInterfaceRelationshipInput =
82                    input.downcast_mut().expect("correct type");
83                if input.client_token.is_none() {
84                    input.client_token = ::std::option::Option::Some(token_provider.make_idempotency_token());
85                }
86            },
87        ));
88        if let ::std::option::Option::Some(config_override) = config_override {
89            for plugin in config_override.runtime_plugins.iter().cloned() {
90                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
91            }
92            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
93                config_override,
94                client_config.config.clone(),
95                &client_config.runtime_components,
96            ));
97        }
98        runtime_plugins
99    }
100}
101impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for PutAssetModelInterfaceRelationship {
102    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
103        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("PutAssetModelInterfaceRelationship");
104
105        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
106            PutAssetModelInterfaceRelationshipRequestSerializer,
107        ));
108        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
109            PutAssetModelInterfaceRelationshipResponseDeserializer,
110        ));
111
112        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
113            crate::config::auth::Params::builder()
114                .operation_name("PutAssetModelInterfaceRelationship")
115                .build()
116                .expect("required fields set"),
117        ));
118
119        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
120            "PutAssetModelInterfaceRelationship",
121            "IoTSiteWise",
122        ));
123        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
124        signing_options.double_uri_encode = true;
125        signing_options.content_sha256_header = false;
126        signing_options.normalize_uri_path = true;
127        signing_options.payload_override = None;
128
129        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
130            signing_options,
131            ..::std::default::Default::default()
132        });
133
134        ::std::option::Option::Some(cfg.freeze())
135    }
136
137    fn runtime_components(
138        &self,
139        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
140    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
141        #[allow(unused_mut)]
142        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("PutAssetModelInterfaceRelationship")
143            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
144            .with_interceptor(PutAssetModelInterfaceRelationshipEndpointParamsInterceptor)
145            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
146                crate::operation::put_asset_model_interface_relationship::PutAssetModelInterfaceRelationshipError,
147            >::new())
148            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
149                crate::operation::put_asset_model_interface_relationship::PutAssetModelInterfaceRelationshipError,
150            >::new())
151            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
152                crate::operation::put_asset_model_interface_relationship::PutAssetModelInterfaceRelationshipError,
153            >::new());
154
155        ::std::borrow::Cow::Owned(rcb)
156    }
157}
158
159#[derive(Debug)]
160struct PutAssetModelInterfaceRelationshipResponseDeserializer;
161impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for PutAssetModelInterfaceRelationshipResponseDeserializer {
162    fn deserialize_nonstreaming(
163        &self,
164        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
165    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
166        let (success, status) = (response.status().is_success(), response.status().as_u16());
167        let headers = response.headers();
168        let body = response.body().bytes().expect("body loaded");
169        #[allow(unused_mut)]
170        let mut force_error = false;
171        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
172        let parse_result = if !success && status != 202 || force_error {
173            crate::protocol_serde::shape_put_asset_model_interface_relationship::de_put_asset_model_interface_relationship_http_error(
174                status, headers, body,
175            )
176        } else {
177            crate::protocol_serde::shape_put_asset_model_interface_relationship::de_put_asset_model_interface_relationship_http_response(
178                status, headers, body,
179            )
180        };
181        crate::protocol_serde::type_erase_result(parse_result)
182    }
183}
184#[derive(Debug)]
185struct PutAssetModelInterfaceRelationshipRequestSerializer;
186impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for PutAssetModelInterfaceRelationshipRequestSerializer {
187    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
188    fn serialize_input(
189        &self,
190        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
191        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
192    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
193        let input = input
194            .downcast::<crate::operation::put_asset_model_interface_relationship::PutAssetModelInterfaceRelationshipInput>()
195            .expect("correct type");
196        let _header_serialization_settings = _cfg
197            .load::<crate::serialization_settings::HeaderSerializationSettings>()
198            .cloned()
199            .unwrap_or_default();
200        let mut request_builder = {
201            #[allow(clippy::uninlined_format_args)]
202            fn uri_base(
203                _input: &crate::operation::put_asset_model_interface_relationship::PutAssetModelInterfaceRelationshipInput,
204                output: &mut ::std::string::String,
205            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
206                use ::std::fmt::Write as _;
207                let input_1 = &_input.asset_model_id;
208                let input_1 = input_1
209                    .as_ref()
210                    .ok_or_else(|| ::aws_smithy_types::error::operation::BuildError::missing_field("asset_model_id", "cannot be empty or unset"))?;
211                let asset_model_id = ::aws_smithy_http::label::fmt_string(input_1, ::aws_smithy_http::label::EncodingStrategy::Default);
212                if asset_model_id.is_empty() {
213                    return ::std::result::Result::Err(::aws_smithy_types::error::operation::BuildError::missing_field(
214                        "asset_model_id",
215                        "cannot be empty or unset",
216                    ));
217                }
218                let input_2 = &_input.interface_asset_model_id;
219                let input_2 = input_2.as_ref().ok_or_else(|| {
220                    ::aws_smithy_types::error::operation::BuildError::missing_field("interface_asset_model_id", "cannot be empty or unset")
221                })?;
222                let interface_asset_model_id = ::aws_smithy_http::label::fmt_string(input_2, ::aws_smithy_http::label::EncodingStrategy::Default);
223                if interface_asset_model_id.is_empty() {
224                    return ::std::result::Result::Err(::aws_smithy_types::error::operation::BuildError::missing_field(
225                        "interface_asset_model_id",
226                        "cannot be empty or unset",
227                    ));
228                }
229                ::std::write!(
230                    output,
231                    "/asset-models/{assetModelId}/interface/{interfaceAssetModelId}/asset-model-interface-relationship",
232                    assetModelId = asset_model_id,
233                    interfaceAssetModelId = interface_asset_model_id
234                )
235                .expect("formatting should succeed");
236                ::std::result::Result::Ok(())
237            }
238            #[allow(clippy::unnecessary_wraps)]
239            fn update_http_builder(
240                input: &crate::operation::put_asset_model_interface_relationship::PutAssetModelInterfaceRelationshipInput,
241                builder: ::http::request::Builder,
242            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
243                let mut uri = ::std::string::String::new();
244                uri_base(input, &mut uri)?;
245                ::std::result::Result::Ok(builder.method("PUT").uri(uri))
246            }
247            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
248            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/json");
249            builder
250        };
251        let body = ::aws_smithy_types::body::SdkBody::from(
252            crate::protocol_serde::shape_put_asset_model_interface_relationship::ser_put_asset_model_interface_relationship_input(&input)?,
253        );
254        if let Some(content_length) = body.content_length() {
255            let content_length = content_length.to_string();
256            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
257        }
258        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
259    }
260}
261#[derive(Debug)]
262struct PutAssetModelInterfaceRelationshipEndpointParamsInterceptor;
263
264impl ::aws_smithy_runtime_api::client::interceptors::Intercept for PutAssetModelInterfaceRelationshipEndpointParamsInterceptor {
265    fn name(&self) -> &'static str {
266        "PutAssetModelInterfaceRelationshipEndpointParamsInterceptor"
267    }
268
269    fn read_before_execution(
270        &self,
271        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
272            '_,
273            ::aws_smithy_runtime_api::client::interceptors::context::Input,
274            ::aws_smithy_runtime_api::client::interceptors::context::Output,
275            ::aws_smithy_runtime_api::client::interceptors::context::Error,
276        >,
277        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
278    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
279        let _input = context
280            .input()
281            .downcast_ref::<PutAssetModelInterfaceRelationshipInput>()
282            .ok_or("failed to downcast to PutAssetModelInterfaceRelationshipInput")?;
283
284        let endpoint_prefix = ::aws_smithy_runtime_api::client::endpoint::EndpointPrefix::new("api.").map_err(|err| {
285            ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint prefix could not be built", err)
286        })?;
287        cfg.interceptor_state().store_put(endpoint_prefix);
288
289        let params = crate::config::endpoint::Params::builder()
290            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
291            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
292            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
293            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
294            .build()
295            .map_err(|err| {
296                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
297            })?;
298        cfg.interceptor_state()
299            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
300        ::std::result::Result::Ok(())
301    }
302}
303
304// The get_* functions below are generated from JMESPath expressions in the
305// operationContextParams trait. They target the operation's input shape.
306
307/// Error type for the `PutAssetModelInterfaceRelationshipError` operation.
308#[non_exhaustive]
309#[derive(::std::fmt::Debug)]
310pub enum PutAssetModelInterfaceRelationshipError {
311    /// <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>
312    ConflictingOperationException(crate::types::error::ConflictingOperationException),
313    /// <p>IoT SiteWise can't process your request right now. Try again later.</p>
314    InternalFailureException(crate::types::error::InternalFailureException),
315    /// <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>
316    InvalidRequestException(crate::types::error::InvalidRequestException),
317    /// <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>
318    /// <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>
319    LimitExceededException(crate::types::error::LimitExceededException),
320    /// <p>The requested resource can't be found.</p>
321    ResourceNotFoundException(crate::types::error::ResourceNotFoundException),
322    /// <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>
323    /// <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>
324    ThrottlingException(crate::types::error::ThrottlingException),
325    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
326    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
327    variable wildcard pattern and check `.code()`:
328     \
329    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
330     \
331    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-PutAssetModelInterfaceRelationshipError) for what information is available for the error.")]
332    Unhandled(crate::error::sealed_unhandled::Unhandled),
333}
334impl PutAssetModelInterfaceRelationshipError {
335    /// Creates the `PutAssetModelInterfaceRelationshipError::Unhandled` variant from any error type.
336    pub fn unhandled(
337        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
338    ) -> Self {
339        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
340            source: err.into(),
341            meta: ::std::default::Default::default(),
342        })
343    }
344
345    /// Creates the `PutAssetModelInterfaceRelationshipError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
346    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
347        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
348            source: err.clone().into(),
349            meta: err,
350        })
351    }
352    ///
353    /// Returns error metadata, which includes the error code, message,
354    /// request ID, and potentially additional information.
355    ///
356    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
357        match self {
358            Self::ConflictingOperationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
359            Self::InternalFailureException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
360            Self::InvalidRequestException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
361            Self::LimitExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
362            Self::ResourceNotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
363            Self::ThrottlingException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
364            Self::Unhandled(e) => &e.meta,
365        }
366    }
367    /// Returns `true` if the error kind is `PutAssetModelInterfaceRelationshipError::ConflictingOperationException`.
368    pub fn is_conflicting_operation_exception(&self) -> bool {
369        matches!(self, Self::ConflictingOperationException(_))
370    }
371    /// Returns `true` if the error kind is `PutAssetModelInterfaceRelationshipError::InternalFailureException`.
372    pub fn is_internal_failure_exception(&self) -> bool {
373        matches!(self, Self::InternalFailureException(_))
374    }
375    /// Returns `true` if the error kind is `PutAssetModelInterfaceRelationshipError::InvalidRequestException`.
376    pub fn is_invalid_request_exception(&self) -> bool {
377        matches!(self, Self::InvalidRequestException(_))
378    }
379    /// Returns `true` if the error kind is `PutAssetModelInterfaceRelationshipError::LimitExceededException`.
380    pub fn is_limit_exceeded_exception(&self) -> bool {
381        matches!(self, Self::LimitExceededException(_))
382    }
383    /// Returns `true` if the error kind is `PutAssetModelInterfaceRelationshipError::ResourceNotFoundException`.
384    pub fn is_resource_not_found_exception(&self) -> bool {
385        matches!(self, Self::ResourceNotFoundException(_))
386    }
387    /// Returns `true` if the error kind is `PutAssetModelInterfaceRelationshipError::ThrottlingException`.
388    pub fn is_throttling_exception(&self) -> bool {
389        matches!(self, Self::ThrottlingException(_))
390    }
391}
392impl ::std::error::Error for PutAssetModelInterfaceRelationshipError {
393    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
394        match self {
395            Self::ConflictingOperationException(_inner) => ::std::option::Option::Some(_inner),
396            Self::InternalFailureException(_inner) => ::std::option::Option::Some(_inner),
397            Self::InvalidRequestException(_inner) => ::std::option::Option::Some(_inner),
398            Self::LimitExceededException(_inner) => ::std::option::Option::Some(_inner),
399            Self::ResourceNotFoundException(_inner) => ::std::option::Option::Some(_inner),
400            Self::ThrottlingException(_inner) => ::std::option::Option::Some(_inner),
401            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
402        }
403    }
404}
405impl ::std::fmt::Display for PutAssetModelInterfaceRelationshipError {
406    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
407        match self {
408            Self::ConflictingOperationException(_inner) => _inner.fmt(f),
409            Self::InternalFailureException(_inner) => _inner.fmt(f),
410            Self::InvalidRequestException(_inner) => _inner.fmt(f),
411            Self::LimitExceededException(_inner) => _inner.fmt(f),
412            Self::ResourceNotFoundException(_inner) => _inner.fmt(f),
413            Self::ThrottlingException(_inner) => _inner.fmt(f),
414            Self::Unhandled(_inner) => {
415                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
416                    write!(f, "unhandled error ({code})")
417                } else {
418                    f.write_str("unhandled error")
419                }
420            }
421        }
422    }
423}
424impl ::aws_smithy_types::retry::ProvideErrorKind for PutAssetModelInterfaceRelationshipError {
425    fn code(&self) -> ::std::option::Option<&str> {
426        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
427    }
428    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
429        ::std::option::Option::None
430    }
431}
432impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for PutAssetModelInterfaceRelationshipError {
433    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
434        match self {
435            Self::ConflictingOperationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
436            Self::InternalFailureException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
437            Self::InvalidRequestException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
438            Self::LimitExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
439            Self::ResourceNotFoundException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
440            Self::ThrottlingException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
441            Self::Unhandled(_inner) => &_inner.meta,
442        }
443    }
444}
445impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for PutAssetModelInterfaceRelationshipError {
446    fn create_unhandled_error(
447        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
448        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
449    ) -> Self {
450        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
451            source,
452            meta: meta.unwrap_or_default(),
453        })
454    }
455}
456impl ::aws_types::request_id::RequestId for crate::operation::put_asset_model_interface_relationship::PutAssetModelInterfaceRelationshipError {
457    fn request_id(&self) -> Option<&str> {
458        self.meta().request_id()
459    }
460}
461
462pub use crate::operation::put_asset_model_interface_relationship::_put_asset_model_interface_relationship_output::PutAssetModelInterfaceRelationshipOutput;
463
464pub use crate::operation::put_asset_model_interface_relationship::_put_asset_model_interface_relationship_input::PutAssetModelInterfaceRelationshipInput;
465
466mod _put_asset_model_interface_relationship_input;
467
468mod _put_asset_model_interface_relationship_output;
469
470/// Builders
471pub mod builders;