aws_sdk_config/operation/
put_organization_config_rule.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `PutOrganizationConfigRule`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct PutOrganizationConfigRule;
6impl PutOrganizationConfigRule {
7    /// Creates a new `PutOrganizationConfigRule`
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_organization_config_rule::PutOrganizationConfigRuleInput,
14    ) -> ::std::result::Result<
15        crate::operation::put_organization_config_rule::PutOrganizationConfigRuleOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::put_organization_config_rule::PutOrganizationConfigRuleError,
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_organization_config_rule::PutOrganizationConfigRuleError>()
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_organization_config_rule::PutOrganizationConfigRuleOutput>()
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_organization_config_rule::PutOrganizationConfigRuleInput,
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            "Config Service",
56            "PutOrganizationConfigRule",
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            "Config Service.PutOrganizationConfigRule",
65            "rpc.service" = "Config Service",
66            "rpc.method" = "PutOrganizationConfigRule",
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_client_plugin(crate::auth_plugin::DefaultAuthOptionsPlugin::new(vec![
80            ::aws_runtime::auth::sigv4::SCHEME_ID,
81        ]));
82        if let ::std::option::Option::Some(config_override) = config_override {
83            for plugin in config_override.runtime_plugins.iter().cloned() {
84                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
85            }
86            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
87                config_override,
88                client_config.config.clone(),
89                &client_config.runtime_components,
90            ));
91        }
92        runtime_plugins
93    }
94}
95impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for PutOrganizationConfigRule {
96    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
97        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("PutOrganizationConfigRule");
98
99        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
100            PutOrganizationConfigRuleRequestSerializer,
101        ));
102        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
103            PutOrganizationConfigRuleResponseDeserializer,
104        ));
105
106        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
107            ::aws_smithy_runtime_api::client::auth::static_resolver::StaticAuthSchemeOptionResolverParams::new(),
108        ));
109
110        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
111            "PutOrganizationConfigRule",
112            "Config Service",
113        ));
114        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
115        signing_options.double_uri_encode = true;
116        signing_options.content_sha256_header = false;
117        signing_options.normalize_uri_path = true;
118        signing_options.payload_override = None;
119
120        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
121            signing_options,
122            ..::std::default::Default::default()
123        });
124
125        ::std::option::Option::Some(cfg.freeze())
126    }
127
128    fn runtime_components(
129        &self,
130        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
131    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
132        #[allow(unused_mut)]
133        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("PutOrganizationConfigRule")
134            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
135            .with_interceptor(PutOrganizationConfigRuleEndpointParamsInterceptor)
136            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
137                crate::operation::put_organization_config_rule::PutOrganizationConfigRuleError,
138            >::new())
139            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
140                crate::operation::put_organization_config_rule::PutOrganizationConfigRuleError,
141            >::new())
142            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
143                crate::operation::put_organization_config_rule::PutOrganizationConfigRuleError,
144            >::new());
145
146        ::std::borrow::Cow::Owned(rcb)
147    }
148}
149
150#[derive(Debug)]
151struct PutOrganizationConfigRuleResponseDeserializer;
152impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for PutOrganizationConfigRuleResponseDeserializer {
153    fn deserialize_nonstreaming(
154        &self,
155        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
156    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
157        let (success, status) = (response.status().is_success(), response.status().as_u16());
158        let headers = response.headers();
159        let body = response.body().bytes().expect("body loaded");
160        #[allow(unused_mut)]
161        let mut force_error = false;
162        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
163        let parse_result = if !success && status != 200 || force_error {
164            crate::protocol_serde::shape_put_organization_config_rule::de_put_organization_config_rule_http_error(status, headers, body)
165        } else {
166            crate::protocol_serde::shape_put_organization_config_rule::de_put_organization_config_rule_http_response(status, headers, body)
167        };
168        crate::protocol_serde::type_erase_result(parse_result)
169    }
170}
171#[derive(Debug)]
172struct PutOrganizationConfigRuleRequestSerializer;
173impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for PutOrganizationConfigRuleRequestSerializer {
174    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
175    fn serialize_input(
176        &self,
177        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
178        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
179    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
180        let input = input
181            .downcast::<crate::operation::put_organization_config_rule::PutOrganizationConfigRuleInput>()
182            .expect("correct type");
183        let _header_serialization_settings = _cfg
184            .load::<crate::serialization_settings::HeaderSerializationSettings>()
185            .cloned()
186            .unwrap_or_default();
187        let mut request_builder = {
188            fn uri_base(
189                _input: &crate::operation::put_organization_config_rule::PutOrganizationConfigRuleInput,
190                output: &mut ::std::string::String,
191            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
192                use ::std::fmt::Write as _;
193                ::std::write!(output, "/").expect("formatting should succeed");
194                ::std::result::Result::Ok(())
195            }
196            #[allow(clippy::unnecessary_wraps)]
197            fn update_http_builder(
198                input: &crate::operation::put_organization_config_rule::PutOrganizationConfigRuleInput,
199                builder: ::http::request::Builder,
200            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
201                let mut uri = ::std::string::String::new();
202                uri_base(input, &mut uri)?;
203                ::std::result::Result::Ok(builder.method("POST").uri(uri))
204            }
205            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
206            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/x-amz-json-1.1");
207            builder = _header_serialization_settings.set_default_header(
208                builder,
209                ::http::header::HeaderName::from_static("x-amz-target"),
210                "StarlingDoveService.PutOrganizationConfigRule",
211            );
212            builder
213        };
214        let body = ::aws_smithy_types::body::SdkBody::from(
215            crate::protocol_serde::shape_put_organization_config_rule::ser_put_organization_config_rule_input(&input)?,
216        );
217        if let Some(content_length) = body.content_length() {
218            let content_length = content_length.to_string();
219            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
220        }
221        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
222    }
223}
224#[derive(Debug)]
225struct PutOrganizationConfigRuleEndpointParamsInterceptor;
226
227impl ::aws_smithy_runtime_api::client::interceptors::Intercept for PutOrganizationConfigRuleEndpointParamsInterceptor {
228    fn name(&self) -> &'static str {
229        "PutOrganizationConfigRuleEndpointParamsInterceptor"
230    }
231
232    fn read_before_execution(
233        &self,
234        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
235            '_,
236            ::aws_smithy_runtime_api::client::interceptors::context::Input,
237            ::aws_smithy_runtime_api::client::interceptors::context::Output,
238            ::aws_smithy_runtime_api::client::interceptors::context::Error,
239        >,
240        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
241    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
242        let _input = context
243            .input()
244            .downcast_ref::<PutOrganizationConfigRuleInput>()
245            .ok_or("failed to downcast to PutOrganizationConfigRuleInput")?;
246
247        let params = crate::config::endpoint::Params::builder()
248            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
249            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
250            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
251            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
252            .build()
253            .map_err(|err| {
254                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
255            })?;
256        cfg.interceptor_state()
257            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
258        ::std::result::Result::Ok(())
259    }
260}
261
262// The get_* functions below are generated from JMESPath expressions in the
263// operationContextParams trait. They target the operation's input shape.
264
265/// Error type for the `PutOrganizationConfigRuleError` operation.
266#[non_exhaustive]
267#[derive(::std::fmt::Debug)]
268pub enum PutOrganizationConfigRuleError {
269    /// <p>Indicates one of the following errors:</p>
270    /// <ul>
271    /// <li>
272    /// <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>
273    /// <li>
274    /// <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>
275    /// <li>
276    /// <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>
277    /// <li>
278    /// <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>
279    /// <ul>
280    /// <li>
281    /// <p>You do not have permission to call IAM <code>GetRole</code> action or create a service-linked role.</p></li>
282    /// <li>
283    /// <p>You do not have permission to read Amazon S3 bucket or call SSM:GetDocument.</p></li>
284    /// </ul></li>
285    /// <li>
286    /// <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>
287    /// </ul>
288    InsufficientPermissionsException(crate::types::error::InsufficientPermissionsException),
289    /// <p>One or more of the specified parameters are not valid. Verify that your parameters are valid and try again.</p>
290    InvalidParameterValueException(crate::types::error::InvalidParameterValueException),
291    /// <p>You have reached the limit of the number of organization Config rules you can create. For more information, see see <a href="https://docs.aws.amazon.com/config/latest/developerguide/configlimits.html"> <b>Service Limits</b> </a> in the <i>Config Developer Guide</i>.</p>
292    MaxNumberOfOrganizationConfigRulesExceededException(crate::types::error::MaxNumberOfOrganizationConfigRulesExceededException),
293    /// <p>Organization is no longer available.</p>
294    NoAvailableOrganizationException(crate::types::error::NoAvailableOrganizationException),
295    /// <p>For <code>PutConfigurationAggregator</code> API, you can see this exception for the following reasons:</p>
296    /// <ul>
297    /// <li>
298    /// <p>No permission to call <code>EnableAWSServiceAccess</code> API</p></li>
299    /// <li>
300    /// <p>The configuration aggregator cannot be updated because your Amazon Web Services Organization management account or the delegated administrator role changed. Delete this aggregator and create a new one with the current Amazon Web Services Organization.</p></li>
301    /// <li>
302    /// <p>The configuration aggregator is associated with a previous Amazon Web Services Organization and Config cannot aggregate data with current Amazon Web Services Organization. Delete this aggregator and create a new one with the current Amazon Web Services Organization.</p></li>
303    /// <li>
304    /// <p>You are not a registered delegated administrator for Config with permissions to call <code>ListDelegatedAdministrators</code> API. Ensure that the management account registers delagated administrator for Config service principal name before the delegated administrator creates an aggregator.</p></li>
305    /// </ul>
306    /// <p>For all <code>OrganizationConfigRule</code> and <code>OrganizationConformancePack</code> APIs, Config throws an exception if APIs are called from member accounts. All APIs must be called from organization management account.</p>
307    OrganizationAccessDeniedException(crate::types::error::OrganizationAccessDeniedException),
308    /// <p>Config resource cannot be created because your organization does not have all features enabled.</p>
309    OrganizationAllFeaturesNotEnabledException(crate::types::error::OrganizationAllFeaturesNotEnabledException),
310    /// <p>You see this exception in the following cases:</p>
311    /// <ul>
312    /// <li>
313    /// <p>For DeleteConfigRule, Config is deleting this rule. Try your request again later.</p></li>
314    /// <li>
315    /// <p>For DeleteConfigRule, the rule is deleting your evaluation results. Try your request again later.</p></li>
316    /// <li>
317    /// <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>
318    /// <li>
319    /// <p>For PutConfigOrganizationRule, organization Config rule deletion is in progress. Try your request again later.</p></li>
320    /// <li>
321    /// <p>For DeleteOrganizationConfigRule, organization Config rule creation is in progress. Try your request again later.</p></li>
322    /// <li>
323    /// <p>For PutConformancePack and PutOrganizationConformancePack, a conformance pack creation, update, and deletion is in progress. Try your request again later.</p></li>
324    /// <li>
325    /// <p>For DeleteConformancePack, a conformance pack creation, update, and deletion is in progress. Try your request again later.</p></li>
326    /// </ul>
327    ResourceInUseException(crate::types::error::ResourceInUseException),
328    /// <p>The requested operation is not valid. You will see this exception if there are missing required fields or if the input value fails the validation.</p>
329    /// <p>For <a href="https://docs.aws.amazon.com/config/latest/APIReference/API_PutStoredQuery.html">PutStoredQuery</a>, one of the following errors:</p>
330    /// <ul>
331    /// <li>
332    /// <p>There are missing required fields.</p></li>
333    /// <li>
334    /// <p>The input value fails the validation.</p></li>
335    /// <li>
336    /// <p>You are trying to create more than 300 queries.</p></li>
337    /// </ul>
338    /// <p>For <a href="https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeConfigurationRecorders.html">DescribeConfigurationRecorders</a> and <a href="https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeConfigurationRecorderStatus.html">DescribeConfigurationRecorderStatus</a>, one of the following errors:</p>
339    /// <ul>
340    /// <li>
341    /// <p>You have specified more than one configuration recorder.</p></li>
342    /// <li>
343    /// <p>You have provided a service principal for service-linked configuration recorder that is not valid.</p></li>
344    /// </ul>
345    /// <p>For <a href="https://docs.aws.amazon.com/config/latest/APIReference/API_AssociateResourceTypes.html">AssociateResourceTypes</a> and <a href="https://docs.aws.amazon.com/config/latest/APIReference/API_DisassociateResourceTypes.html">DisassociateResourceTypes</a>, one of the following errors:</p>
346    /// <ul>
347    /// <li>
348    /// <p>Your configuraiton recorder has a recording strategy that does not allow the association or disassociation of resource types.</p></li>
349    /// <li>
350    /// <p>One or more of the specified resource types are already associated or disassociated with the configuration recorder.</p></li>
351    /// <li>
352    /// <p>For service-linked configuration recorders, the configuration recorder does not record one or more of the specified resource types.</p></li>
353    /// </ul>
354    ValidationException(crate::types::error::ValidationException),
355    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
356    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
357    variable wildcard pattern and check `.code()`:
358     \
359    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
360     \
361    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-PutOrganizationConfigRuleError) for what information is available for the error.")]
362    Unhandled(crate::error::sealed_unhandled::Unhandled),
363}
364impl PutOrganizationConfigRuleError {
365    /// Creates the `PutOrganizationConfigRuleError::Unhandled` variant from any error type.
366    pub fn unhandled(
367        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
368    ) -> Self {
369        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
370            source: err.into(),
371            meta: ::std::default::Default::default(),
372        })
373    }
374
375    /// Creates the `PutOrganizationConfigRuleError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
376    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
377        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
378            source: err.clone().into(),
379            meta: err,
380        })
381    }
382    ///
383    /// Returns error metadata, which includes the error code, message,
384    /// request ID, and potentially additional information.
385    ///
386    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
387        match self {
388            Self::InsufficientPermissionsException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
389            Self::InvalidParameterValueException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
390            Self::MaxNumberOfOrganizationConfigRulesExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
391            Self::NoAvailableOrganizationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
392            Self::OrganizationAccessDeniedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
393            Self::OrganizationAllFeaturesNotEnabledException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
394            Self::ResourceInUseException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
395            Self::ValidationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
396            Self::Unhandled(e) => &e.meta,
397        }
398    }
399    /// Returns `true` if the error kind is `PutOrganizationConfigRuleError::InsufficientPermissionsException`.
400    pub fn is_insufficient_permissions_exception(&self) -> bool {
401        matches!(self, Self::InsufficientPermissionsException(_))
402    }
403    /// Returns `true` if the error kind is `PutOrganizationConfigRuleError::InvalidParameterValueException`.
404    pub fn is_invalid_parameter_value_exception(&self) -> bool {
405        matches!(self, Self::InvalidParameterValueException(_))
406    }
407    /// Returns `true` if the error kind is `PutOrganizationConfigRuleError::MaxNumberOfOrganizationConfigRulesExceededException`.
408    pub fn is_max_number_of_organization_config_rules_exceeded_exception(&self) -> bool {
409        matches!(self, Self::MaxNumberOfOrganizationConfigRulesExceededException(_))
410    }
411    /// Returns `true` if the error kind is `PutOrganizationConfigRuleError::NoAvailableOrganizationException`.
412    pub fn is_no_available_organization_exception(&self) -> bool {
413        matches!(self, Self::NoAvailableOrganizationException(_))
414    }
415    /// Returns `true` if the error kind is `PutOrganizationConfigRuleError::OrganizationAccessDeniedException`.
416    pub fn is_organization_access_denied_exception(&self) -> bool {
417        matches!(self, Self::OrganizationAccessDeniedException(_))
418    }
419    /// Returns `true` if the error kind is `PutOrganizationConfigRuleError::OrganizationAllFeaturesNotEnabledException`.
420    pub fn is_organization_all_features_not_enabled_exception(&self) -> bool {
421        matches!(self, Self::OrganizationAllFeaturesNotEnabledException(_))
422    }
423    /// Returns `true` if the error kind is `PutOrganizationConfigRuleError::ResourceInUseException`.
424    pub fn is_resource_in_use_exception(&self) -> bool {
425        matches!(self, Self::ResourceInUseException(_))
426    }
427    /// Returns `true` if the error kind is `PutOrganizationConfigRuleError::ValidationException`.
428    pub fn is_validation_exception(&self) -> bool {
429        matches!(self, Self::ValidationException(_))
430    }
431}
432impl ::std::error::Error for PutOrganizationConfigRuleError {
433    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
434        match self {
435            Self::InsufficientPermissionsException(_inner) => ::std::option::Option::Some(_inner),
436            Self::InvalidParameterValueException(_inner) => ::std::option::Option::Some(_inner),
437            Self::MaxNumberOfOrganizationConfigRulesExceededException(_inner) => ::std::option::Option::Some(_inner),
438            Self::NoAvailableOrganizationException(_inner) => ::std::option::Option::Some(_inner),
439            Self::OrganizationAccessDeniedException(_inner) => ::std::option::Option::Some(_inner),
440            Self::OrganizationAllFeaturesNotEnabledException(_inner) => ::std::option::Option::Some(_inner),
441            Self::ResourceInUseException(_inner) => ::std::option::Option::Some(_inner),
442            Self::ValidationException(_inner) => ::std::option::Option::Some(_inner),
443            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
444        }
445    }
446}
447impl ::std::fmt::Display for PutOrganizationConfigRuleError {
448    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
449        match self {
450            Self::InsufficientPermissionsException(_inner) => _inner.fmt(f),
451            Self::InvalidParameterValueException(_inner) => _inner.fmt(f),
452            Self::MaxNumberOfOrganizationConfigRulesExceededException(_inner) => _inner.fmt(f),
453            Self::NoAvailableOrganizationException(_inner) => _inner.fmt(f),
454            Self::OrganizationAccessDeniedException(_inner) => _inner.fmt(f),
455            Self::OrganizationAllFeaturesNotEnabledException(_inner) => _inner.fmt(f),
456            Self::ResourceInUseException(_inner) => _inner.fmt(f),
457            Self::ValidationException(_inner) => _inner.fmt(f),
458            Self::Unhandled(_inner) => {
459                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
460                    write!(f, "unhandled error ({code})")
461                } else {
462                    f.write_str("unhandled error")
463                }
464            }
465        }
466    }
467}
468impl ::aws_smithy_types::retry::ProvideErrorKind for PutOrganizationConfigRuleError {
469    fn code(&self) -> ::std::option::Option<&str> {
470        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
471    }
472    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
473        ::std::option::Option::None
474    }
475}
476impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for PutOrganizationConfigRuleError {
477    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
478        match self {
479            Self::InsufficientPermissionsException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
480            Self::InvalidParameterValueException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
481            Self::MaxNumberOfOrganizationConfigRulesExceededException(_inner) => {
482                ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
483            }
484            Self::NoAvailableOrganizationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
485            Self::OrganizationAccessDeniedException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
486            Self::OrganizationAllFeaturesNotEnabledException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
487            Self::ResourceInUseException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
488            Self::ValidationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
489            Self::Unhandled(_inner) => &_inner.meta,
490        }
491    }
492}
493impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for PutOrganizationConfigRuleError {
494    fn create_unhandled_error(
495        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
496        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
497    ) -> Self {
498        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
499            source,
500            meta: meta.unwrap_or_default(),
501        })
502    }
503}
504impl ::aws_types::request_id::RequestId for crate::operation::put_organization_config_rule::PutOrganizationConfigRuleError {
505    fn request_id(&self) -> Option<&str> {
506        self.meta().request_id()
507    }
508}
509
510pub use crate::operation::put_organization_config_rule::_put_organization_config_rule_output::PutOrganizationConfigRuleOutput;
511
512pub use crate::operation::put_organization_config_rule::_put_organization_config_rule_input::PutOrganizationConfigRuleInput;
513
514mod _put_organization_config_rule_input;
515
516mod _put_organization_config_rule_output;
517
518/// Builders
519pub mod builders;