aws_sdk_config/operation/
describe_compliance_by_config_rule.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `DescribeComplianceByConfigRule`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct DescribeComplianceByConfigRule;
6impl DescribeComplianceByConfigRule {
7    /// Creates a new `DescribeComplianceByConfigRule`
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::describe_compliance_by_config_rule::DescribeComplianceByConfigRuleInput,
14    ) -> ::std::result::Result<
15        crate::operation::describe_compliance_by_config_rule::DescribeComplianceByConfigRuleOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::describe_compliance_by_config_rule::DescribeComplianceByConfigRuleError,
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::describe_compliance_by_config_rule::DescribeComplianceByConfigRuleError>()
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::describe_compliance_by_config_rule::DescribeComplianceByConfigRuleOutput>()
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::describe_compliance_by_config_rule::DescribeComplianceByConfigRuleInput,
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            "DescribeComplianceByConfigRule",
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.DescribeComplianceByConfigRule",
65            "rpc.service" = "Config Service",
66            "rpc.method" = "DescribeComplianceByConfigRule",
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 DescribeComplianceByConfigRule {
96    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
97        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("DescribeComplianceByConfigRule");
98
99        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
100            DescribeComplianceByConfigRuleRequestSerializer,
101        ));
102        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
103            DescribeComplianceByConfigRuleResponseDeserializer,
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            "DescribeComplianceByConfigRule",
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("DescribeComplianceByConfigRule")
134            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
135            .with_interceptor(DescribeComplianceByConfigRuleEndpointParamsInterceptor)
136            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
137                crate::operation::describe_compliance_by_config_rule::DescribeComplianceByConfigRuleError,
138            >::new())
139            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
140                crate::operation::describe_compliance_by_config_rule::DescribeComplianceByConfigRuleError,
141            >::new())
142            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
143                crate::operation::describe_compliance_by_config_rule::DescribeComplianceByConfigRuleError,
144            >::new());
145
146        ::std::borrow::Cow::Owned(rcb)
147    }
148}
149
150#[derive(Debug)]
151struct DescribeComplianceByConfigRuleResponseDeserializer;
152impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for DescribeComplianceByConfigRuleResponseDeserializer {
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_describe_compliance_by_config_rule::de_describe_compliance_by_config_rule_http_error(status, headers, body)
165        } else {
166            crate::protocol_serde::shape_describe_compliance_by_config_rule::de_describe_compliance_by_config_rule_http_response(
167                status, headers, body,
168            )
169        };
170        crate::protocol_serde::type_erase_result(parse_result)
171    }
172}
173#[derive(Debug)]
174struct DescribeComplianceByConfigRuleRequestSerializer;
175impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for DescribeComplianceByConfigRuleRequestSerializer {
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::describe_compliance_by_config_rule::DescribeComplianceByConfigRuleInput>()
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            fn uri_base(
191                _input: &crate::operation::describe_compliance_by_config_rule::DescribeComplianceByConfigRuleInput,
192                output: &mut ::std::string::String,
193            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
194                use ::std::fmt::Write as _;
195                ::std::write!(output, "/").expect("formatting should succeed");
196                ::std::result::Result::Ok(())
197            }
198            #[allow(clippy::unnecessary_wraps)]
199            fn update_http_builder(
200                input: &crate::operation::describe_compliance_by_config_rule::DescribeComplianceByConfigRuleInput,
201                builder: ::http::request::Builder,
202            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
203                let mut uri = ::std::string::String::new();
204                uri_base(input, &mut uri)?;
205                ::std::result::Result::Ok(builder.method("POST").uri(uri))
206            }
207            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
208            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/x-amz-json-1.1");
209            builder = _header_serialization_settings.set_default_header(
210                builder,
211                ::http::header::HeaderName::from_static("x-amz-target"),
212                "StarlingDoveService.DescribeComplianceByConfigRule",
213            );
214            builder
215        };
216        let body = ::aws_smithy_types::body::SdkBody::from(
217            crate::protocol_serde::shape_describe_compliance_by_config_rule::ser_describe_compliance_by_config_rule_input(&input)?,
218        );
219        if let Some(content_length) = body.content_length() {
220            let content_length = content_length.to_string();
221            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
222        }
223        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
224    }
225}
226#[derive(Debug)]
227struct DescribeComplianceByConfigRuleEndpointParamsInterceptor;
228
229impl ::aws_smithy_runtime_api::client::interceptors::Intercept for DescribeComplianceByConfigRuleEndpointParamsInterceptor {
230    fn name(&self) -> &'static str {
231        "DescribeComplianceByConfigRuleEndpointParamsInterceptor"
232    }
233
234    fn read_before_execution(
235        &self,
236        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
237            '_,
238            ::aws_smithy_runtime_api::client::interceptors::context::Input,
239            ::aws_smithy_runtime_api::client::interceptors::context::Output,
240            ::aws_smithy_runtime_api::client::interceptors::context::Error,
241        >,
242        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
243    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
244        let _input = context
245            .input()
246            .downcast_ref::<DescribeComplianceByConfigRuleInput>()
247            .ok_or("failed to downcast to DescribeComplianceByConfigRuleInput")?;
248
249        let params = crate::config::endpoint::Params::builder()
250            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
251            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
252            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
253            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
254            .build()
255            .map_err(|err| {
256                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
257            })?;
258        cfg.interceptor_state()
259            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
260        ::std::result::Result::Ok(())
261    }
262}
263
264// The get_* functions below are generated from JMESPath expressions in the
265// operationContextParams trait. They target the operation's input shape.
266
267/// Error type for the `DescribeComplianceByConfigRuleError` operation.
268#[non_exhaustive]
269#[derive(::std::fmt::Debug)]
270pub enum DescribeComplianceByConfigRuleError {
271    /// <p>The specified next token is not valid. Specify the <code>nextToken</code> string that was returned in the previous response to get the next page of results.</p>
272    InvalidNextTokenException(crate::types::error::InvalidNextTokenException),
273    /// <p>One or more of the specified parameters are not valid. Verify that your parameters are valid and try again.</p>
274    InvalidParameterValueException(crate::types::error::InvalidParameterValueException),
275    /// <p>The Config rule in the request is not valid. Verify that the rule is an Config Process Check rule, that the rule name is correct, and that valid Amazon Resouce Names (ARNs) are used before trying again.</p>
276    NoSuchConfigRuleException(crate::types::error::NoSuchConfigRuleException),
277    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
278    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
279    variable wildcard pattern and check `.code()`:
280     \
281    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
282     \
283    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-DescribeComplianceByConfigRuleError) for what information is available for the error.")]
284    Unhandled(crate::error::sealed_unhandled::Unhandled),
285}
286impl DescribeComplianceByConfigRuleError {
287    /// Creates the `DescribeComplianceByConfigRuleError::Unhandled` variant from any error type.
288    pub fn unhandled(
289        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
290    ) -> Self {
291        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
292            source: err.into(),
293            meta: ::std::default::Default::default(),
294        })
295    }
296
297    /// Creates the `DescribeComplianceByConfigRuleError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
298    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
299        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
300            source: err.clone().into(),
301            meta: err,
302        })
303    }
304    ///
305    /// Returns error metadata, which includes the error code, message,
306    /// request ID, and potentially additional information.
307    ///
308    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
309        match self {
310            Self::InvalidNextTokenException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
311            Self::InvalidParameterValueException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
312            Self::NoSuchConfigRuleException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
313            Self::Unhandled(e) => &e.meta,
314        }
315    }
316    /// Returns `true` if the error kind is `DescribeComplianceByConfigRuleError::InvalidNextTokenException`.
317    pub fn is_invalid_next_token_exception(&self) -> bool {
318        matches!(self, Self::InvalidNextTokenException(_))
319    }
320    /// Returns `true` if the error kind is `DescribeComplianceByConfigRuleError::InvalidParameterValueException`.
321    pub fn is_invalid_parameter_value_exception(&self) -> bool {
322        matches!(self, Self::InvalidParameterValueException(_))
323    }
324    /// Returns `true` if the error kind is `DescribeComplianceByConfigRuleError::NoSuchConfigRuleException`.
325    pub fn is_no_such_config_rule_exception(&self) -> bool {
326        matches!(self, Self::NoSuchConfigRuleException(_))
327    }
328}
329impl ::std::error::Error for DescribeComplianceByConfigRuleError {
330    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
331        match self {
332            Self::InvalidNextTokenException(_inner) => ::std::option::Option::Some(_inner),
333            Self::InvalidParameterValueException(_inner) => ::std::option::Option::Some(_inner),
334            Self::NoSuchConfigRuleException(_inner) => ::std::option::Option::Some(_inner),
335            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
336        }
337    }
338}
339impl ::std::fmt::Display for DescribeComplianceByConfigRuleError {
340    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
341        match self {
342            Self::InvalidNextTokenException(_inner) => _inner.fmt(f),
343            Self::InvalidParameterValueException(_inner) => _inner.fmt(f),
344            Self::NoSuchConfigRuleException(_inner) => _inner.fmt(f),
345            Self::Unhandled(_inner) => {
346                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
347                    write!(f, "unhandled error ({code})")
348                } else {
349                    f.write_str("unhandled error")
350                }
351            }
352        }
353    }
354}
355impl ::aws_smithy_types::retry::ProvideErrorKind for DescribeComplianceByConfigRuleError {
356    fn code(&self) -> ::std::option::Option<&str> {
357        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
358    }
359    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
360        ::std::option::Option::None
361    }
362}
363impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for DescribeComplianceByConfigRuleError {
364    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
365        match self {
366            Self::InvalidNextTokenException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
367            Self::InvalidParameterValueException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
368            Self::NoSuchConfigRuleException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
369            Self::Unhandled(_inner) => &_inner.meta,
370        }
371    }
372}
373impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for DescribeComplianceByConfigRuleError {
374    fn create_unhandled_error(
375        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
376        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
377    ) -> Self {
378        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
379            source,
380            meta: meta.unwrap_or_default(),
381        })
382    }
383}
384impl ::aws_types::request_id::RequestId for crate::operation::describe_compliance_by_config_rule::DescribeComplianceByConfigRuleError {
385    fn request_id(&self) -> Option<&str> {
386        self.meta().request_id()
387    }
388}
389
390pub use crate::operation::describe_compliance_by_config_rule::_describe_compliance_by_config_rule_output::DescribeComplianceByConfigRuleOutput;
391
392pub use crate::operation::describe_compliance_by_config_rule::_describe_compliance_by_config_rule_input::DescribeComplianceByConfigRuleInput;
393
394mod _describe_compliance_by_config_rule_input;
395
396mod _describe_compliance_by_config_rule_output;
397
398/// Builders
399pub mod builders;
400
401/// Paginator for this operation
402pub mod paginator;