aws_sdk_sts/operation/
get_session_token.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `GetSessionToken`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct GetSessionToken;
6impl GetSessionToken {
7    /// Creates a new `GetSessionToken`
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::get_session_token::GetSessionTokenInput,
14    ) -> ::std::result::Result<
15        crate::operation::get_session_token::GetSessionTokenOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::get_session_token::GetSessionTokenError,
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::get_session_token::GetSessionTokenError>()
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::get_session_token::GetSessionTokenOutput>()
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::get_session_token::GetSessionTokenInput,
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        ::aws_smithy_runtime::client::orchestrator::invoke_with_stop_point("sts", "GetSessionToken", input, runtime_plugins, stop_point).await
54    }
55
56    pub(crate) fn operation_runtime_plugins(
57        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
58        client_config: &crate::config::Config,
59        config_override: ::std::option::Option<crate::config::Builder>,
60    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
61        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
62        runtime_plugins = runtime_plugins.with_client_plugin(crate::auth_plugin::DefaultAuthOptionsPlugin::new(vec![
63            ::aws_runtime::auth::sigv4::SCHEME_ID,
64        ]));
65        if let ::std::option::Option::Some(config_override) = config_override {
66            for plugin in config_override.runtime_plugins.iter().cloned() {
67                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
68            }
69            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
70                config_override,
71                client_config.config.clone(),
72                &client_config.runtime_components,
73            ));
74        }
75        runtime_plugins
76    }
77}
78impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for GetSessionToken {
79    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
80        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("GetSessionToken");
81
82        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
83            GetSessionTokenRequestSerializer,
84        ));
85        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
86            GetSessionTokenResponseDeserializer,
87        ));
88
89        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
90            ::aws_smithy_runtime_api::client::auth::static_resolver::StaticAuthSchemeOptionResolverParams::new(),
91        ));
92
93        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::SensitiveOutput);
94        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new("GetSessionToken", "sts"));
95        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
96        signing_options.double_uri_encode = true;
97        signing_options.content_sha256_header = false;
98        signing_options.normalize_uri_path = true;
99        signing_options.payload_override = None;
100
101        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
102            signing_options,
103            ..::std::default::Default::default()
104        });
105
106        ::std::option::Option::Some(cfg.freeze())
107    }
108
109    fn runtime_components(
110        &self,
111        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
112    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
113        #[allow(unused_mut)]
114        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("GetSessionToken")
115            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
116            .with_interceptor(GetSessionTokenEndpointParamsInterceptor)
117            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
118                crate::operation::get_session_token::GetSessionTokenError,
119            >::new())
120            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
121                crate::operation::get_session_token::GetSessionTokenError,
122            >::new())
123            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
124                crate::operation::get_session_token::GetSessionTokenError,
125            >::new());
126
127        ::std::borrow::Cow::Owned(rcb)
128    }
129}
130
131#[derive(Debug)]
132struct GetSessionTokenResponseDeserializer;
133impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for GetSessionTokenResponseDeserializer {
134    fn deserialize_nonstreaming(
135        &self,
136        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
137    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
138        let (success, status) = (response.status().is_success(), response.status().as_u16());
139        let headers = response.headers();
140        let body = response.body().bytes().expect("body loaded");
141        #[allow(unused_mut)]
142        let mut force_error = false;
143        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
144        let parse_result = if !success && status != 200 || force_error {
145            crate::protocol_serde::shape_get_session_token::de_get_session_token_http_error(status, headers, body)
146        } else {
147            crate::protocol_serde::shape_get_session_token::de_get_session_token_http_response(status, headers, body)
148        };
149        crate::protocol_serde::type_erase_result(parse_result)
150    }
151}
152#[derive(Debug)]
153struct GetSessionTokenRequestSerializer;
154impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for GetSessionTokenRequestSerializer {
155    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
156    fn serialize_input(
157        &self,
158        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
159        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
160    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
161        let input = input
162            .downcast::<crate::operation::get_session_token::GetSessionTokenInput>()
163            .expect("correct type");
164        let _header_serialization_settings = _cfg
165            .load::<crate::serialization_settings::HeaderSerializationSettings>()
166            .cloned()
167            .unwrap_or_default();
168        let mut request_builder = {
169            fn uri_base(
170                _input: &crate::operation::get_session_token::GetSessionTokenInput,
171                output: &mut ::std::string::String,
172            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
173                use ::std::fmt::Write as _;
174                ::std::write!(output, "/").expect("formatting should succeed");
175                ::std::result::Result::Ok(())
176            }
177            #[allow(clippy::unnecessary_wraps)]
178            fn update_http_builder(
179                input: &crate::operation::get_session_token::GetSessionTokenInput,
180                builder: ::http::request::Builder,
181            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
182                let mut uri = ::std::string::String::new();
183                uri_base(input, &mut uri)?;
184                ::std::result::Result::Ok(builder.method("POST").uri(uri))
185            }
186            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
187            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/x-www-form-urlencoded");
188            builder
189        };
190        let body = ::aws_smithy_types::body::SdkBody::from(
191            crate::protocol_serde::shape_get_session_token_input::ser_get_session_token_input_input_input(&input)?,
192        );
193        if let Some(content_length) = body.content_length() {
194            let content_length = content_length.to_string();
195            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
196        }
197        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
198    }
199}
200#[derive(Debug)]
201struct GetSessionTokenEndpointParamsInterceptor;
202
203impl ::aws_smithy_runtime_api::client::interceptors::Intercept for GetSessionTokenEndpointParamsInterceptor {
204    fn name(&self) -> &'static str {
205        "GetSessionTokenEndpointParamsInterceptor"
206    }
207
208    fn read_before_execution(
209        &self,
210        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
211            '_,
212            ::aws_smithy_runtime_api::client::interceptors::context::Input,
213            ::aws_smithy_runtime_api::client::interceptors::context::Output,
214            ::aws_smithy_runtime_api::client::interceptors::context::Error,
215        >,
216        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
217    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
218        let _input = context
219            .input()
220            .downcast_ref::<GetSessionTokenInput>()
221            .ok_or("failed to downcast to GetSessionTokenInput")?;
222
223        let params = crate::config::endpoint::Params::builder()
224            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
225            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
226            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
227            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
228            .build()
229            .map_err(|err| {
230                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
231            })?;
232        cfg.interceptor_state()
233            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
234        ::std::result::Result::Ok(())
235    }
236}
237
238// The get_* functions below are generated from JMESPath expressions in the
239// operationContextParams trait. They target the operation's input shape.
240
241/// Error type for the `GetSessionTokenError` operation.
242#[non_exhaustive]
243#[derive(::std::fmt::Debug)]
244pub enum GetSessionTokenError {
245    /// <p>STS is not activated in the requested region for the account that is being asked to generate credentials. The account administrator must use the IAM console to activate STS in that region. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html">Activating and Deactivating STS in an Amazon Web Services Region</a> in the <i>IAM User Guide</i>.</p>
246    RegionDisabledException(crate::types::error::RegionDisabledException),
247    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
248    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
249    variable wildcard pattern and check `.code()`:
250     \
251    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
252     \
253    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-GetSessionTokenError) for what information is available for the error.")]
254    Unhandled(crate::error::sealed_unhandled::Unhandled),
255}
256impl GetSessionTokenError {
257    /// Creates the `GetSessionTokenError::Unhandled` variant from any error type.
258    pub fn unhandled(
259        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
260    ) -> Self {
261        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
262            source: err.into(),
263            meta: ::std::default::Default::default(),
264        })
265    }
266
267    /// Creates the `GetSessionTokenError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
268    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
269        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
270            source: err.clone().into(),
271            meta: err,
272        })
273    }
274    ///
275    /// Returns error metadata, which includes the error code, message,
276    /// request ID, and potentially additional information.
277    ///
278    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
279        match self {
280            Self::RegionDisabledException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
281            Self::Unhandled(e) => &e.meta,
282        }
283    }
284    /// Returns `true` if the error kind is `GetSessionTokenError::RegionDisabledException`.
285    pub fn is_region_disabled_exception(&self) -> bool {
286        matches!(self, Self::RegionDisabledException(_))
287    }
288}
289impl ::std::error::Error for GetSessionTokenError {
290    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
291        match self {
292            Self::RegionDisabledException(_inner) => ::std::option::Option::Some(_inner),
293            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
294        }
295    }
296}
297impl ::std::fmt::Display for GetSessionTokenError {
298    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
299        match self {
300            Self::RegionDisabledException(_inner) => _inner.fmt(f),
301            Self::Unhandled(_inner) => {
302                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
303                    write!(f, "unhandled error ({code})")
304                } else {
305                    f.write_str("unhandled error")
306                }
307            }
308        }
309    }
310}
311impl ::aws_smithy_types::retry::ProvideErrorKind for GetSessionTokenError {
312    fn code(&self) -> ::std::option::Option<&str> {
313        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
314    }
315    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
316        ::std::option::Option::None
317    }
318}
319impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for GetSessionTokenError {
320    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
321        match self {
322            Self::RegionDisabledException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
323            Self::Unhandled(_inner) => &_inner.meta,
324        }
325    }
326}
327impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for GetSessionTokenError {
328    fn create_unhandled_error(
329        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
330        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
331    ) -> Self {
332        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
333            source,
334            meta: meta.unwrap_or_default(),
335        })
336    }
337}
338impl ::aws_types::request_id::RequestId for crate::operation::get_session_token::GetSessionTokenError {
339    fn request_id(&self) -> Option<&str> {
340        self.meta().request_id()
341    }
342}
343
344pub use crate::operation::get_session_token::_get_session_token_output::GetSessionTokenOutput;
345
346pub use crate::operation::get_session_token::_get_session_token_input::GetSessionTokenInput;
347
348mod _get_session_token_input;
349
350mod _get_session_token_output;
351
352/// Builders
353pub mod builders;