aws_sdk_quicksight/operation/
list_topics.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `ListTopics`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct ListTopics;
6impl ListTopics {
7    /// Creates a new `ListTopics`
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_topics::ListTopicsInput,
14    ) -> ::std::result::Result<
15        crate::operation::list_topics::ListTopicsOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::list_topics::ListTopicsError,
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_topics::ListTopicsError>()
27                    .expect("correct error type")
28            })
29        };
30        use ::tracing::Instrument;
31        let context = Self::orchestrate_with_stop_point(runtime_plugins, input, ::aws_smithy_runtime::client::orchestrator::StopPoint::None)
32            // Create a parent span for the entire operation. Includes a random, internal-only,
33            // seven-digit ID for the operation orchestration so that it can be correlated in the logs.
34            .instrument(::tracing::debug_span!(
35                "quicksight.ListTopics",
36                "rpc.service" = "quicksight",
37                "rpc.method" = "ListTopics",
38                "sdk_invocation_id" = ::fastrand::u32(1_000_000..10_000_000),
39                "rpc.system" = "aws-api",
40            ))
41            .await
42            .map_err(map_err)?;
43        let output = context.finalize().map_err(map_err)?;
44        ::std::result::Result::Ok(
45            output
46                .downcast::<crate::operation::list_topics::ListTopicsOutput>()
47                .expect("correct output type"),
48        )
49    }
50
51    pub(crate) async fn orchestrate_with_stop_point(
52        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
53        input: crate::operation::list_topics::ListTopicsInput,
54        stop_point: ::aws_smithy_runtime::client::orchestrator::StopPoint,
55    ) -> ::std::result::Result<
56        ::aws_smithy_runtime_api::client::interceptors::context::InterceptorContext,
57        ::aws_smithy_runtime_api::client::result::SdkError<
58            ::aws_smithy_runtime_api::client::interceptors::context::Error,
59            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
60        >,
61    > {
62        let input = ::aws_smithy_runtime_api::client::interceptors::context::Input::erase(input);
63        ::aws_smithy_runtime::client::orchestrator::invoke_with_stop_point("quicksight", "ListTopics", input, runtime_plugins, stop_point).await
64    }
65
66    pub(crate) fn operation_runtime_plugins(
67        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
68        client_config: &crate::config::Config,
69        config_override: ::std::option::Option<crate::config::Builder>,
70    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
71        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
72        runtime_plugins = runtime_plugins.with_client_plugin(crate::auth_plugin::DefaultAuthOptionsPlugin::new(vec![
73            ::aws_runtime::auth::sigv4::SCHEME_ID,
74        ]));
75        if let ::std::option::Option::Some(config_override) = config_override {
76            for plugin in config_override.runtime_plugins.iter().cloned() {
77                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
78            }
79            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
80                config_override,
81                client_config.config.clone(),
82                &client_config.runtime_components,
83            ));
84        }
85        runtime_plugins
86    }
87}
88impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for ListTopics {
89    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
90        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("ListTopics");
91
92        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
93            ListTopicsRequestSerializer,
94        ));
95        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
96            ListTopicsResponseDeserializer,
97        ));
98
99        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
100            ::aws_smithy_runtime_api::client::auth::static_resolver::StaticAuthSchemeOptionResolverParams::new(),
101        ));
102
103        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new("ListTopics", "quicksight"));
104        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
105        signing_options.double_uri_encode = true;
106        signing_options.content_sha256_header = false;
107        signing_options.normalize_uri_path = true;
108        signing_options.payload_override = None;
109
110        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
111            signing_options,
112            ..::std::default::Default::default()
113        });
114
115        ::std::option::Option::Some(cfg.freeze())
116    }
117
118    fn runtime_components(
119        &self,
120        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
121    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
122        #[allow(unused_mut)]
123        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("ListTopics")
124            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
125            .with_interceptor(ListTopicsEndpointParamsInterceptor)
126            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
127                crate::operation::list_topics::ListTopicsError,
128            >::new())
129            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
130                crate::operation::list_topics::ListTopicsError,
131            >::new())
132            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
133                crate::operation::list_topics::ListTopicsError,
134            >::new());
135
136        ::std::borrow::Cow::Owned(rcb)
137    }
138}
139
140#[derive(Debug)]
141struct ListTopicsResponseDeserializer;
142impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for ListTopicsResponseDeserializer {
143    fn deserialize_nonstreaming(
144        &self,
145        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
146    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
147        let (success, status) = (response.status().is_success(), response.status().as_u16());
148        let headers = response.headers();
149        let body = response.body().bytes().expect("body loaded");
150        #[allow(unused_mut)]
151        let mut force_error = false;
152        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
153        let parse_result = if !success && status != 200 || force_error {
154            crate::protocol_serde::shape_list_topics::de_list_topics_http_error(status, headers, body)
155        } else {
156            crate::protocol_serde::shape_list_topics::de_list_topics_http_response(status, headers, body)
157        };
158        crate::protocol_serde::type_erase_result(parse_result)
159    }
160}
161#[derive(Debug)]
162struct ListTopicsRequestSerializer;
163impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for ListTopicsRequestSerializer {
164    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
165    fn serialize_input(
166        &self,
167        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
168        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
169    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
170        let input = input.downcast::<crate::operation::list_topics::ListTopicsInput>().expect("correct type");
171        let _header_serialization_settings = _cfg
172            .load::<crate::serialization_settings::HeaderSerializationSettings>()
173            .cloned()
174            .unwrap_or_default();
175        let mut request_builder = {
176            fn uri_base(
177                _input: &crate::operation::list_topics::ListTopicsInput,
178                output: &mut ::std::string::String,
179            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
180                use ::std::fmt::Write as _;
181                let input_1 = &_input.aws_account_id;
182                let input_1 = input_1
183                    .as_ref()
184                    .ok_or_else(|| ::aws_smithy_types::error::operation::BuildError::missing_field("aws_account_id", "cannot be empty or unset"))?;
185                let aws_account_id = ::aws_smithy_http::label::fmt_string(input_1, ::aws_smithy_http::label::EncodingStrategy::Default);
186                if aws_account_id.is_empty() {
187                    return ::std::result::Result::Err(::aws_smithy_types::error::operation::BuildError::missing_field(
188                        "aws_account_id",
189                        "cannot be empty or unset",
190                    ));
191                }
192                ::std::write!(output, "/accounts/{AwsAccountId}/topics", AwsAccountId = aws_account_id).expect("formatting should succeed");
193                ::std::result::Result::Ok(())
194            }
195            fn uri_query(
196                _input: &crate::operation::list_topics::ListTopicsInput,
197                mut output: &mut ::std::string::String,
198            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
199                let mut query = ::aws_smithy_http::query::Writer::new(output);
200                if let ::std::option::Option::Some(inner_2) = &_input.next_token {
201                    {
202                        query.push_kv("next-token", &::aws_smithy_http::query::fmt_string(inner_2));
203                    }
204                }
205                if let ::std::option::Option::Some(inner_3) = &_input.max_results {
206                    {
207                        query.push_kv("max-results", ::aws_smithy_types::primitive::Encoder::from(*inner_3).encode());
208                    }
209                }
210                ::std::result::Result::Ok(())
211            }
212            #[allow(clippy::unnecessary_wraps)]
213            fn update_http_builder(
214                input: &crate::operation::list_topics::ListTopicsInput,
215                builder: ::http::request::Builder,
216            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
217                let mut uri = ::std::string::String::new();
218                uri_base(input, &mut uri)?;
219                uri_query(input, &mut uri)?;
220                ::std::result::Result::Ok(builder.method("GET").uri(uri))
221            }
222            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
223            builder
224        };
225        let body = ::aws_smithy_types::body::SdkBody::from("");
226
227        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
228    }
229}
230#[derive(Debug)]
231struct ListTopicsEndpointParamsInterceptor;
232
233impl ::aws_smithy_runtime_api::client::interceptors::Intercept for ListTopicsEndpointParamsInterceptor {
234    fn name(&self) -> &'static str {
235        "ListTopicsEndpointParamsInterceptor"
236    }
237
238    fn read_before_execution(
239        &self,
240        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
241            '_,
242            ::aws_smithy_runtime_api::client::interceptors::context::Input,
243            ::aws_smithy_runtime_api::client::interceptors::context::Output,
244            ::aws_smithy_runtime_api::client::interceptors::context::Error,
245        >,
246        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
247    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
248        let _input = context
249            .input()
250            .downcast_ref::<ListTopicsInput>()
251            .ok_or("failed to downcast to ListTopicsInput")?;
252
253        let params = crate::config::endpoint::Params::builder()
254            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
255            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
256            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
257            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
258            .build()
259            .map_err(|err| {
260                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
261            })?;
262        cfg.interceptor_state()
263            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
264        ::std::result::Result::Ok(())
265    }
266}
267
268// The get_* functions below are generated from JMESPath expressions in the
269// operationContextParams trait. They target the operation's input shape.
270
271/// Error type for the `ListTopicsError` operation.
272#[non_exhaustive]
273#[derive(::std::fmt::Debug)]
274pub enum ListTopicsError {
275    /// <p>You don't have access to this item. The provided credentials couldn't be validated. You might not be authorized to carry out the request. Make sure that your account is authorized to use the Amazon QuickSight service, that your policies have the correct permissions, and that you are using the correct credentials.</p>
276    AccessDeniedException(crate::types::error::AccessDeniedException),
277    /// <p>An internal failure occurred.</p>
278    InternalFailureException(crate::types::error::InternalFailureException),
279    /// <p>The <code>NextToken</code> value isn't valid.</p>
280    InvalidNextTokenException(crate::types::error::InvalidNextTokenException),
281    /// <p>One or more parameters has a value that isn't valid.</p>
282    InvalidParameterValueException(crate::types::error::InvalidParameterValueException),
283    /// <p>Access is throttled.</p>
284    ThrottlingException(crate::types::error::ThrottlingException),
285    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
286    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
287    variable wildcard pattern and check `.code()`:
288     \
289    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
290     \
291    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-ListTopicsError) for what information is available for the error.")]
292    Unhandled(crate::error::sealed_unhandled::Unhandled),
293}
294impl ListTopicsError {
295    /// Creates the `ListTopicsError::Unhandled` variant from any error type.
296    pub fn unhandled(
297        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
298    ) -> Self {
299        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
300            source: err.into(),
301            meta: ::std::default::Default::default(),
302        })
303    }
304
305    /// Creates the `ListTopicsError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
306    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
307        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
308            source: err.clone().into(),
309            meta: err,
310        })
311    }
312    ///
313    /// Returns error metadata, which includes the error code, message,
314    /// request ID, and potentially additional information.
315    ///
316    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
317        match self {
318            Self::AccessDeniedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
319            Self::InternalFailureException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
320            Self::InvalidNextTokenException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
321            Self::InvalidParameterValueException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
322            Self::ThrottlingException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
323            Self::Unhandled(e) => &e.meta,
324        }
325    }
326    /// Returns `true` if the error kind is `ListTopicsError::AccessDeniedException`.
327    pub fn is_access_denied_exception(&self) -> bool {
328        matches!(self, Self::AccessDeniedException(_))
329    }
330    /// Returns `true` if the error kind is `ListTopicsError::InternalFailureException`.
331    pub fn is_internal_failure_exception(&self) -> bool {
332        matches!(self, Self::InternalFailureException(_))
333    }
334    /// Returns `true` if the error kind is `ListTopicsError::InvalidNextTokenException`.
335    pub fn is_invalid_next_token_exception(&self) -> bool {
336        matches!(self, Self::InvalidNextTokenException(_))
337    }
338    /// Returns `true` if the error kind is `ListTopicsError::InvalidParameterValueException`.
339    pub fn is_invalid_parameter_value_exception(&self) -> bool {
340        matches!(self, Self::InvalidParameterValueException(_))
341    }
342    /// Returns `true` if the error kind is `ListTopicsError::ThrottlingException`.
343    pub fn is_throttling_exception(&self) -> bool {
344        matches!(self, Self::ThrottlingException(_))
345    }
346}
347impl ::std::error::Error for ListTopicsError {
348    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
349        match self {
350            Self::AccessDeniedException(_inner) => ::std::option::Option::Some(_inner),
351            Self::InternalFailureException(_inner) => ::std::option::Option::Some(_inner),
352            Self::InvalidNextTokenException(_inner) => ::std::option::Option::Some(_inner),
353            Self::InvalidParameterValueException(_inner) => ::std::option::Option::Some(_inner),
354            Self::ThrottlingException(_inner) => ::std::option::Option::Some(_inner),
355            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
356        }
357    }
358}
359impl ::std::fmt::Display for ListTopicsError {
360    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
361        match self {
362            Self::AccessDeniedException(_inner) => _inner.fmt(f),
363            Self::InternalFailureException(_inner) => _inner.fmt(f),
364            Self::InvalidNextTokenException(_inner) => _inner.fmt(f),
365            Self::InvalidParameterValueException(_inner) => _inner.fmt(f),
366            Self::ThrottlingException(_inner) => _inner.fmt(f),
367            Self::Unhandled(_inner) => {
368                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
369                    write!(f, "unhandled error ({code})")
370                } else {
371                    f.write_str("unhandled error")
372                }
373            }
374        }
375    }
376}
377impl ::aws_smithy_types::retry::ProvideErrorKind for ListTopicsError {
378    fn code(&self) -> ::std::option::Option<&str> {
379        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
380    }
381    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
382        ::std::option::Option::None
383    }
384}
385impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for ListTopicsError {
386    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
387        match self {
388            Self::AccessDeniedException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
389            Self::InternalFailureException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
390            Self::InvalidNextTokenException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
391            Self::InvalidParameterValueException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
392            Self::ThrottlingException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
393            Self::Unhandled(_inner) => &_inner.meta,
394        }
395    }
396}
397impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for ListTopicsError {
398    fn create_unhandled_error(
399        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
400        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
401    ) -> Self {
402        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
403            source,
404            meta: meta.unwrap_or_default(),
405        })
406    }
407}
408impl ::aws_types::request_id::RequestId for crate::operation::list_topics::ListTopicsError {
409    fn request_id(&self) -> Option<&str> {
410        self.meta().request_id()
411    }
412}
413
414pub use crate::operation::list_topics::_list_topics_output::ListTopicsOutput;
415
416pub use crate::operation::list_topics::_list_topics_input::ListTopicsInput;
417
418mod _list_topics_input;
419
420mod _list_topics_output;
421
422/// Builders
423pub mod builders;
424
425/// Paginator for this operation
426pub mod paginator;