aws_sdk_config/operation/
put_config_rule.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `PutConfigRule`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct PutConfigRule;
6impl PutConfigRule {
7    /// Creates a new `PutConfigRule`
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_config_rule::PutConfigRuleInput,
14    ) -> ::std::result::Result<
15        crate::operation::put_config_rule::PutConfigRuleOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::put_config_rule::PutConfigRuleError,
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_config_rule::PutConfigRuleError>()
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_config_rule::PutConfigRuleOutput>()
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_config_rule::PutConfigRuleInput,
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("Config Service", "PutConfigRule", 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                "Config Service.PutConfigRule",
59                "rpc.service" = "Config Service",
60                "rpc.method" = "PutConfigRule",
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
74        if let ::std::option::Option::Some(config_override) = config_override {
75            for plugin in config_override.runtime_plugins.iter().cloned() {
76                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
77            }
78            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
79                config_override,
80                client_config.config.clone(),
81                &client_config.runtime_components,
82            ));
83        }
84        runtime_plugins
85    }
86}
87impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for PutConfigRule {
88    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
89        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("PutConfigRule");
90
91        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
92            PutConfigRuleRequestSerializer,
93        ));
94        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
95            PutConfigRuleResponseDeserializer,
96        ));
97
98        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
99            crate::config::auth::Params::builder()
100                .operation_name("PutConfigRule")
101                .build()
102                .expect("required fields set"),
103        ));
104
105        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
106            "PutConfigRule",
107            "Config Service",
108        ));
109        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
110        signing_options.double_uri_encode = true;
111        signing_options.content_sha256_header = false;
112        signing_options.normalize_uri_path = true;
113        signing_options.payload_override = None;
114
115        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
116            signing_options,
117            ..::std::default::Default::default()
118        });
119
120        ::std::option::Option::Some(cfg.freeze())
121    }
122
123    fn runtime_components(
124        &self,
125        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
126    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
127        #[allow(unused_mut)]
128        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("PutConfigRule")
129            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
130            .with_interceptor(PutConfigRuleEndpointParamsInterceptor)
131            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
132                crate::operation::put_config_rule::PutConfigRuleError,
133            >::new())
134            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
135                crate::operation::put_config_rule::PutConfigRuleError,
136            >::new())
137            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
138                crate::operation::put_config_rule::PutConfigRuleError,
139            >::new());
140
141        ::std::borrow::Cow::Owned(rcb)
142    }
143}
144
145#[derive(Debug)]
146struct PutConfigRuleResponseDeserializer;
147impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for PutConfigRuleResponseDeserializer {
148    fn deserialize_nonstreaming(
149        &self,
150        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
151    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
152        let (success, status) = (response.status().is_success(), response.status().as_u16());
153        let headers = response.headers();
154        let body = response.body().bytes().expect("body loaded");
155        #[allow(unused_mut)]
156        let mut force_error = false;
157        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
158        let parse_result = if !success && status != 200 || force_error {
159            crate::protocol_serde::shape_put_config_rule::de_put_config_rule_http_error(status, headers, body)
160        } else {
161            crate::protocol_serde::shape_put_config_rule::de_put_config_rule_http_response(status, headers, body)
162        };
163        crate::protocol_serde::type_erase_result(parse_result)
164    }
165}
166#[derive(Debug)]
167struct PutConfigRuleRequestSerializer;
168impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for PutConfigRuleRequestSerializer {
169    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
170    fn serialize_input(
171        &self,
172        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
173        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
174    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
175        let input = input
176            .downcast::<crate::operation::put_config_rule::PutConfigRuleInput>()
177            .expect("correct type");
178        let _header_serialization_settings = _cfg
179            .load::<crate::serialization_settings::HeaderSerializationSettings>()
180            .cloned()
181            .unwrap_or_default();
182        let mut request_builder = {
183            #[allow(clippy::uninlined_format_args)]
184            fn uri_base(
185                _input: &crate::operation::put_config_rule::PutConfigRuleInput,
186                output: &mut ::std::string::String,
187            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
188                use ::std::fmt::Write as _;
189                ::std::write!(output, "/").expect("formatting should succeed");
190                ::std::result::Result::Ok(())
191            }
192            #[allow(clippy::unnecessary_wraps)]
193            fn update_http_builder(
194                input: &crate::operation::put_config_rule::PutConfigRuleInput,
195                builder: ::http::request::Builder,
196            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
197                let mut uri = ::std::string::String::new();
198                uri_base(input, &mut uri)?;
199                ::std::result::Result::Ok(builder.method("POST").uri(uri))
200            }
201            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
202            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/x-amz-json-1.1");
203            builder = _header_serialization_settings.set_default_header(
204                builder,
205                ::http::header::HeaderName::from_static("x-amz-target"),
206                "StarlingDoveService.PutConfigRule",
207            );
208            builder
209        };
210        let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_put_config_rule::ser_put_config_rule_input(&input)?);
211        if let Some(content_length) = body.content_length() {
212            let content_length = content_length.to_string();
213            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
214        }
215        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
216    }
217}
218#[derive(Debug)]
219struct PutConfigRuleEndpointParamsInterceptor;
220
221impl ::aws_smithy_runtime_api::client::interceptors::Intercept for PutConfigRuleEndpointParamsInterceptor {
222    fn name(&self) -> &'static str {
223        "PutConfigRuleEndpointParamsInterceptor"
224    }
225
226    fn read_before_execution(
227        &self,
228        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
229            '_,
230            ::aws_smithy_runtime_api::client::interceptors::context::Input,
231            ::aws_smithy_runtime_api::client::interceptors::context::Output,
232            ::aws_smithy_runtime_api::client::interceptors::context::Error,
233        >,
234        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
235    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
236        let _input = context
237            .input()
238            .downcast_ref::<PutConfigRuleInput>()
239            .ok_or("failed to downcast to PutConfigRuleInput")?;
240
241        let params = crate::config::endpoint::Params::builder()
242            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
243            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
244            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
245            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
246            .build()
247            .map_err(|err| {
248                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
249            })?;
250        cfg.interceptor_state()
251            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
252        ::std::result::Result::Ok(())
253    }
254}
255
256// The get_* functions below are generated from JMESPath expressions in the
257// operationContextParams trait. They target the operation's input shape.
258
259/// Error type for the `PutConfigRuleError` operation.
260#[non_exhaustive]
261#[derive(::std::fmt::Debug)]
262pub enum PutConfigRuleError {
263    /// <p>Indicates one of the following errors:</p>
264    /// <ul>
265    /// <li>
266    /// <p>For <a href="https://docs.aws.amazon.com/config/latest/APIReference/API_PutConfigRule.html">PutConfigRule</a>, the rule cannot be created because the IAM role assigned to Config lacks permissions to perform the config:Put* action.</p></li>
267    /// <li>
268    /// <p>For <a href="https://docs.aws.amazon.com/config/latest/APIReference/API_PutConfigRule.html">PutConfigRule</a>, the Lambda function cannot be invoked. Check the function ARN, and check the function's permissions.</p></li>
269    /// <li>
270    /// <p>For <a href="https://docs.aws.amazon.com/config/latest/APIReference/API_PutOrganizationConfigRule.html">PutOrganizationConfigRule</a>, organization Config rule cannot be created because you do not have permissions to call IAM <code>GetRole</code> action or create a service-linked role.</p></li>
271    /// <li>
272    /// <p>For <a href="https://docs.aws.amazon.com/config/latest/APIReference/API_PutConformancePack.html">PutConformancePack</a> and <a href="https://docs.aws.amazon.com/config/latest/APIReference/API_PutOrganizationConformancePack.html">PutOrganizationConformancePack</a>, a conformance pack cannot be created because you do not have the following permissions:</p>
273    /// <ul>
274    /// <li>
275    /// <p>You do not have permission to call IAM <code>GetRole</code> action or create a service-linked role.</p></li>
276    /// <li>
277    /// <p>You do not have permission to read Amazon S3 bucket or call SSM:GetDocument.</p></li>
278    /// </ul></li>
279    /// <li>
280    /// <p>For <a href="https://docs.aws.amazon.com/config/latest/APIReference/API_PutServiceLinkedConfigurationRecorder.html">PutServiceLinkedConfigurationRecorder</a>, a service-linked configuration recorder cannot be created because you do not have the following permissions: IAM <code>CreateServiceLinkedRole</code>.</p></li>
281    /// </ul>
282    InsufficientPermissionsException(crate::types::error::InsufficientPermissionsException),
283    /// <p>One or more of the specified parameters are not valid. Verify that your parameters are valid and try again.</p>
284    InvalidParameterValueException(crate::types::error::InvalidParameterValueException),
285    /// <p>Failed to add the Config rule because the account already contains the maximum number of 1000 rules. Consider deleting any deactivated rules before you add new rules.</p>
286    MaxNumberOfConfigRulesExceededException(crate::types::error::MaxNumberOfConfigRulesExceededException),
287    /// <p>There are no customer managed configuration recorders available to record your resources. Use the <a href="https://docs.aws.amazon.com/config/latest/APIReference/API_PutConfigurationRecorder.html">PutConfigurationRecorder</a> operation to create the customer managed configuration recorder.</p>
288    NoAvailableConfigurationRecorderException(crate::types::error::NoAvailableConfigurationRecorderException),
289    /// <p>You see this exception in the following cases:</p>
290    /// <ul>
291    /// <li>
292    /// <p>For DeleteConfigRule, Config is deleting this rule. Try your request again later.</p></li>
293    /// <li>
294    /// <p>For DeleteConfigRule, the rule is deleting your evaluation results. Try your request again later.</p></li>
295    /// <li>
296    /// <p>For DeleteConfigRule, a remediation action is associated with the rule and Config cannot delete this rule. Delete the remediation action associated with the rule before deleting the rule and try your request again later.</p></li>
297    /// <li>
298    /// <p>For PutConfigOrganizationRule, organization Config rule deletion is in progress. Try your request again later.</p></li>
299    /// <li>
300    /// <p>For DeleteOrganizationConfigRule, organization Config rule creation is in progress. Try your request again later.</p></li>
301    /// <li>
302    /// <p>For PutConformancePack and PutOrganizationConformancePack, a conformance pack creation, update, and deletion is in progress. Try your request again later.</p></li>
303    /// <li>
304    /// <p>For DeleteConformancePack, a conformance pack creation, update, and deletion is in progress. Try your request again later.</p></li>
305    /// </ul>
306    ResourceInUseException(crate::types::error::ResourceInUseException),
307    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
308    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
309    variable wildcard pattern and check `.code()`:
310     \
311    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
312     \
313    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-PutConfigRuleError) for what information is available for the error.")]
314    Unhandled(crate::error::sealed_unhandled::Unhandled),
315}
316impl PutConfigRuleError {
317    /// Creates the `PutConfigRuleError::Unhandled` variant from any error type.
318    pub fn unhandled(
319        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
320    ) -> Self {
321        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
322            source: err.into(),
323            meta: ::std::default::Default::default(),
324        })
325    }
326
327    /// Creates the `PutConfigRuleError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
328    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
329        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
330            source: err.clone().into(),
331            meta: err,
332        })
333    }
334    ///
335    /// Returns error metadata, which includes the error code, message,
336    /// request ID, and potentially additional information.
337    ///
338    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
339        match self {
340            Self::InsufficientPermissionsException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
341            Self::InvalidParameterValueException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
342            Self::MaxNumberOfConfigRulesExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
343            Self::NoAvailableConfigurationRecorderException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
344            Self::ResourceInUseException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
345            Self::Unhandled(e) => &e.meta,
346        }
347    }
348    /// Returns `true` if the error kind is `PutConfigRuleError::InsufficientPermissionsException`.
349    pub fn is_insufficient_permissions_exception(&self) -> bool {
350        matches!(self, Self::InsufficientPermissionsException(_))
351    }
352    /// Returns `true` if the error kind is `PutConfigRuleError::InvalidParameterValueException`.
353    pub fn is_invalid_parameter_value_exception(&self) -> bool {
354        matches!(self, Self::InvalidParameterValueException(_))
355    }
356    /// Returns `true` if the error kind is `PutConfigRuleError::MaxNumberOfConfigRulesExceededException`.
357    pub fn is_max_number_of_config_rules_exceeded_exception(&self) -> bool {
358        matches!(self, Self::MaxNumberOfConfigRulesExceededException(_))
359    }
360    /// Returns `true` if the error kind is `PutConfigRuleError::NoAvailableConfigurationRecorderException`.
361    pub fn is_no_available_configuration_recorder_exception(&self) -> bool {
362        matches!(self, Self::NoAvailableConfigurationRecorderException(_))
363    }
364    /// Returns `true` if the error kind is `PutConfigRuleError::ResourceInUseException`.
365    pub fn is_resource_in_use_exception(&self) -> bool {
366        matches!(self, Self::ResourceInUseException(_))
367    }
368}
369impl ::std::error::Error for PutConfigRuleError {
370    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
371        match self {
372            Self::InsufficientPermissionsException(_inner) => ::std::option::Option::Some(_inner),
373            Self::InvalidParameterValueException(_inner) => ::std::option::Option::Some(_inner),
374            Self::MaxNumberOfConfigRulesExceededException(_inner) => ::std::option::Option::Some(_inner),
375            Self::NoAvailableConfigurationRecorderException(_inner) => ::std::option::Option::Some(_inner),
376            Self::ResourceInUseException(_inner) => ::std::option::Option::Some(_inner),
377            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
378        }
379    }
380}
381impl ::std::fmt::Display for PutConfigRuleError {
382    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
383        match self {
384            Self::InsufficientPermissionsException(_inner) => _inner.fmt(f),
385            Self::InvalidParameterValueException(_inner) => _inner.fmt(f),
386            Self::MaxNumberOfConfigRulesExceededException(_inner) => _inner.fmt(f),
387            Self::NoAvailableConfigurationRecorderException(_inner) => _inner.fmt(f),
388            Self::ResourceInUseException(_inner) => _inner.fmt(f),
389            Self::Unhandled(_inner) => {
390                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
391                    write!(f, "unhandled error ({code})")
392                } else {
393                    f.write_str("unhandled error")
394                }
395            }
396        }
397    }
398}
399impl ::aws_smithy_types::retry::ProvideErrorKind for PutConfigRuleError {
400    fn code(&self) -> ::std::option::Option<&str> {
401        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
402    }
403    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
404        ::std::option::Option::None
405    }
406}
407impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for PutConfigRuleError {
408    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
409        match self {
410            Self::InsufficientPermissionsException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
411            Self::InvalidParameterValueException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
412            Self::MaxNumberOfConfigRulesExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
413            Self::NoAvailableConfigurationRecorderException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
414            Self::ResourceInUseException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
415            Self::Unhandled(_inner) => &_inner.meta,
416        }
417    }
418}
419impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for PutConfigRuleError {
420    fn create_unhandled_error(
421        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
422        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
423    ) -> Self {
424        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
425            source,
426            meta: meta.unwrap_or_default(),
427        })
428    }
429}
430impl ::aws_types::request_id::RequestId for crate::operation::put_config_rule::PutConfigRuleError {
431    fn request_id(&self) -> Option<&str> {
432        self.meta().request_id()
433    }
434}
435
436pub use crate::operation::put_config_rule::_put_config_rule_output::PutConfigRuleOutput;
437
438pub use crate::operation::put_config_rule::_put_config_rule_input::PutConfigRuleInput;
439
440mod _put_config_rule_input;
441
442mod _put_config_rule_output;
443
444/// Builders
445pub mod builders;