aws_sdk_resiliencehub/operation/
list_recommendation_templates.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `ListRecommendationTemplates`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct ListRecommendationTemplates;
6impl ListRecommendationTemplates {
7    /// Creates a new `ListRecommendationTemplates`
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::list_recommendation_templates::ListRecommendationTemplatesInput,
14    ) -> ::std::result::Result<
15        crate::operation::list_recommendation_templates::ListRecommendationTemplatesOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::list_recommendation_templates::ListRecommendationTemplatesError,
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::list_recommendation_templates::ListRecommendationTemplatesError>()
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::list_recommendation_templates::ListRecommendationTemplatesOutput>()
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::list_recommendation_templates::ListRecommendationTemplatesInput,
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            "resiliencehub",
56            "ListRecommendationTemplates",
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            "resiliencehub.ListRecommendationTemplates",
65            "rpc.service" = "resiliencehub",
66            "rpc.method" = "ListRecommendationTemplates",
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
80        if let ::std::option::Option::Some(config_override) = config_override {
81            for plugin in config_override.runtime_plugins.iter().cloned() {
82                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
83            }
84            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
85                config_override,
86                client_config.config.clone(),
87                &client_config.runtime_components,
88            ));
89        }
90        runtime_plugins
91    }
92}
93impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for ListRecommendationTemplates {
94    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
95        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("ListRecommendationTemplates");
96
97        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
98            ListRecommendationTemplatesRequestSerializer,
99        ));
100        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
101            ListRecommendationTemplatesResponseDeserializer,
102        ));
103
104        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
105            crate::config::auth::Params::builder()
106                .operation_name("ListRecommendationTemplates")
107                .build()
108                .expect("required fields set"),
109        ));
110
111        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::SensitiveOutput);
112        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
113            "ListRecommendationTemplates",
114            "resiliencehub",
115        ));
116        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
117        signing_options.double_uri_encode = true;
118        signing_options.content_sha256_header = false;
119        signing_options.normalize_uri_path = true;
120        signing_options.payload_override = None;
121
122        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
123            signing_options,
124            ..::std::default::Default::default()
125        });
126
127        ::std::option::Option::Some(cfg.freeze())
128    }
129
130    fn runtime_components(
131        &self,
132        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
133    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
134        #[allow(unused_mut)]
135        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("ListRecommendationTemplates")
136            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
137            .with_interceptor(ListRecommendationTemplatesEndpointParamsInterceptor)
138            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
139                crate::operation::list_recommendation_templates::ListRecommendationTemplatesError,
140            >::new())
141            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
142                crate::operation::list_recommendation_templates::ListRecommendationTemplatesError,
143            >::new())
144            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
145                crate::operation::list_recommendation_templates::ListRecommendationTemplatesError,
146            >::new());
147
148        ::std::borrow::Cow::Owned(rcb)
149    }
150}
151
152#[derive(Debug)]
153struct ListRecommendationTemplatesResponseDeserializer;
154impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for ListRecommendationTemplatesResponseDeserializer {
155    fn deserialize_nonstreaming(
156        &self,
157        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
158    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
159        let (success, status) = (response.status().is_success(), response.status().as_u16());
160        let headers = response.headers();
161        let body = response.body().bytes().expect("body loaded");
162        #[allow(unused_mut)]
163        let mut force_error = false;
164        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
165        let parse_result = if !success && status != 200 || force_error {
166            crate::protocol_serde::shape_list_recommendation_templates::de_list_recommendation_templates_http_error(status, headers, body)
167        } else {
168            crate::protocol_serde::shape_list_recommendation_templates::de_list_recommendation_templates_http_response(status, headers, body)
169        };
170        crate::protocol_serde::type_erase_result(parse_result)
171    }
172}
173#[derive(Debug)]
174struct ListRecommendationTemplatesRequestSerializer;
175impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for ListRecommendationTemplatesRequestSerializer {
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::list_recommendation_templates::ListRecommendationTemplatesInput>()
184            .expect("correct type");
185        let _header_serialization_settings = _cfg
186            .load::<crate::serialization_settings::HeaderSerializationSettings>()
187            .cloned()
188            .unwrap_or_default();
189        let mut request_builder = {
190            #[allow(clippy::uninlined_format_args)]
191            fn uri_base(
192                _input: &crate::operation::list_recommendation_templates::ListRecommendationTemplatesInput,
193                output: &mut ::std::string::String,
194            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
195                use ::std::fmt::Write as _;
196                ::std::write!(output, "/list-recommendation-templates").expect("formatting should succeed");
197                ::std::result::Result::Ok(())
198            }
199            fn uri_query(
200                _input: &crate::operation::list_recommendation_templates::ListRecommendationTemplatesInput,
201                mut output: &mut ::std::string::String,
202            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
203                let mut query = ::aws_smithy_http::query::Writer::new(output);
204                if let ::std::option::Option::Some(inner_1) = &_input.assessment_arn {
205                    {
206                        query.push_kv("assessmentArn", &::aws_smithy_http::query::fmt_string(inner_1));
207                    }
208                }
209                if let ::std::option::Option::Some(inner_2) = &_input.reverse_order {
210                    {
211                        query.push_kv("reverseOrder", ::aws_smithy_types::primitive::Encoder::from(*inner_2).encode());
212                    }
213                }
214                if let ::std::option::Option::Some(inner_3) = &_input.status {
215                    {
216                        for inner_4 in inner_3 {
217                            query.push_kv("status", &::aws_smithy_http::query::fmt_string(inner_4));
218                        }
219                    }
220                }
221                if let ::std::option::Option::Some(inner_5) = &_input.recommendation_template_arn {
222                    {
223                        query.push_kv("recommendationTemplateArn", &::aws_smithy_http::query::fmt_string(inner_5));
224                    }
225                }
226                if let ::std::option::Option::Some(inner_6) = &_input.name {
227                    {
228                        query.push_kv("name", &::aws_smithy_http::query::fmt_string(inner_6));
229                    }
230                }
231                if let ::std::option::Option::Some(inner_7) = &_input.next_token {
232                    {
233                        query.push_kv("nextToken", &::aws_smithy_http::query::fmt_string(inner_7));
234                    }
235                }
236                if let ::std::option::Option::Some(inner_8) = &_input.max_results {
237                    {
238                        query.push_kv("maxResults", ::aws_smithy_types::primitive::Encoder::from(*inner_8).encode());
239                    }
240                }
241                ::std::result::Result::Ok(())
242            }
243            #[allow(clippy::unnecessary_wraps)]
244            fn update_http_builder(
245                input: &crate::operation::list_recommendation_templates::ListRecommendationTemplatesInput,
246                builder: ::http::request::Builder,
247            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
248                let mut uri = ::std::string::String::new();
249                uri_base(input, &mut uri)?;
250                uri_query(input, &mut uri)?;
251                ::std::result::Result::Ok(builder.method("GET").uri(uri))
252            }
253            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
254            builder
255        };
256        let body = ::aws_smithy_types::body::SdkBody::from("");
257
258        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
259    }
260}
261#[derive(Debug)]
262struct ListRecommendationTemplatesEndpointParamsInterceptor;
263
264impl ::aws_smithy_runtime_api::client::interceptors::Intercept for ListRecommendationTemplatesEndpointParamsInterceptor {
265    fn name(&self) -> &'static str {
266        "ListRecommendationTemplatesEndpointParamsInterceptor"
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::<ListRecommendationTemplatesInput>()
282            .ok_or("failed to downcast to ListRecommendationTemplatesInput")?;
283
284        let params = crate::config::endpoint::Params::builder()
285            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
286            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
287            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
288            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
289            .build()
290            .map_err(|err| {
291                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
292            })?;
293        cfg.interceptor_state()
294            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
295        ::std::result::Result::Ok(())
296    }
297}
298
299// The get_* functions below are generated from JMESPath expressions in the
300// operationContextParams trait. They target the operation's input shape.
301
302/// Error type for the `ListRecommendationTemplatesError` operation.
303#[non_exhaustive]
304#[derive(::std::fmt::Debug)]
305pub enum ListRecommendationTemplatesError {
306    /// <p>You don't have permissions to perform the requested operation. The user or role that is making the request must have at least one IAM permissions policy attached that grants the required permissions.</p>
307    AccessDeniedException(crate::types::error::AccessDeniedException),
308    /// <p>This exception occurs when there is an internal failure in the Resilience Hub service.</p>
309    InternalServerException(crate::types::error::InternalServerException),
310    /// <p>This exception occurs when you have exceeded the limit on the number of requests per second.</p>
311    ThrottlingException(crate::types::error::ThrottlingException),
312    /// <p>This exception occurs when a request is not valid.</p>
313    ValidationException(crate::types::error::ValidationException),
314    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
315    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
316    variable wildcard pattern and check `.code()`:
317     \
318    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
319     \
320    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-ListRecommendationTemplatesError) for what information is available for the error.")]
321    Unhandled(crate::error::sealed_unhandled::Unhandled),
322}
323impl ListRecommendationTemplatesError {
324    /// Creates the `ListRecommendationTemplatesError::Unhandled` variant from any error type.
325    pub fn unhandled(
326        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
327    ) -> Self {
328        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
329            source: err.into(),
330            meta: ::std::default::Default::default(),
331        })
332    }
333
334    /// Creates the `ListRecommendationTemplatesError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
335    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
336        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
337            source: err.clone().into(),
338            meta: err,
339        })
340    }
341    ///
342    /// Returns error metadata, which includes the error code, message,
343    /// request ID, and potentially additional information.
344    ///
345    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
346        match self {
347            Self::AccessDeniedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
348            Self::InternalServerException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
349            Self::ThrottlingException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
350            Self::ValidationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
351            Self::Unhandled(e) => &e.meta,
352        }
353    }
354    /// Returns `true` if the error kind is `ListRecommendationTemplatesError::AccessDeniedException`.
355    pub fn is_access_denied_exception(&self) -> bool {
356        matches!(self, Self::AccessDeniedException(_))
357    }
358    /// Returns `true` if the error kind is `ListRecommendationTemplatesError::InternalServerException`.
359    pub fn is_internal_server_exception(&self) -> bool {
360        matches!(self, Self::InternalServerException(_))
361    }
362    /// Returns `true` if the error kind is `ListRecommendationTemplatesError::ThrottlingException`.
363    pub fn is_throttling_exception(&self) -> bool {
364        matches!(self, Self::ThrottlingException(_))
365    }
366    /// Returns `true` if the error kind is `ListRecommendationTemplatesError::ValidationException`.
367    pub fn is_validation_exception(&self) -> bool {
368        matches!(self, Self::ValidationException(_))
369    }
370}
371impl ::std::error::Error for ListRecommendationTemplatesError {
372    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
373        match self {
374            Self::AccessDeniedException(_inner) => ::std::option::Option::Some(_inner),
375            Self::InternalServerException(_inner) => ::std::option::Option::Some(_inner),
376            Self::ThrottlingException(_inner) => ::std::option::Option::Some(_inner),
377            Self::ValidationException(_inner) => ::std::option::Option::Some(_inner),
378            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
379        }
380    }
381}
382impl ::std::fmt::Display for ListRecommendationTemplatesError {
383    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
384        match self {
385            Self::AccessDeniedException(_inner) => _inner.fmt(f),
386            Self::InternalServerException(_inner) => _inner.fmt(f),
387            Self::ThrottlingException(_inner) => _inner.fmt(f),
388            Self::ValidationException(_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 ListRecommendationTemplatesError {
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 ListRecommendationTemplatesError {
408    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
409        match self {
410            Self::AccessDeniedException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
411            Self::InternalServerException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
412            Self::ThrottlingException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
413            Self::ValidationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
414            Self::Unhandled(_inner) => &_inner.meta,
415        }
416    }
417}
418impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for ListRecommendationTemplatesError {
419    fn create_unhandled_error(
420        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
421        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
422    ) -> Self {
423        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
424            source,
425            meta: meta.unwrap_or_default(),
426        })
427    }
428}
429impl ::aws_types::request_id::RequestId for crate::operation::list_recommendation_templates::ListRecommendationTemplatesError {
430    fn request_id(&self) -> Option<&str> {
431        self.meta().request_id()
432    }
433}
434
435pub use crate::operation::list_recommendation_templates::_list_recommendation_templates_output::ListRecommendationTemplatesOutput;
436
437pub use crate::operation::list_recommendation_templates::_list_recommendation_templates_input::ListRecommendationTemplatesInput;
438
439mod _list_recommendation_templates_input;
440
441mod _list_recommendation_templates_output;
442
443/// Builders
444pub mod builders;
445
446/// Paginator for this operation
447pub mod paginator;