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