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            fn uri_base(
182                _input: &crate::operation::get_session_token::GetSessionTokenInput,
183                output: &mut ::std::string::String,
184            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
185                use ::std::fmt::Write as _;
186                ::std::write!(output, "/").expect("formatting should succeed");
187                ::std::result::Result::Ok(())
188            }
189            #[allow(clippy::unnecessary_wraps)]
190            fn update_http_builder(
191                input: &crate::operation::get_session_token::GetSessionTokenInput,
192                builder: ::http::request::Builder,
193            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
194                let mut uri = ::std::string::String::new();
195                uri_base(input, &mut uri)?;
196                ::std::result::Result::Ok(builder.method("POST").uri(uri))
197            }
198            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
199            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/x-www-form-urlencoded");
200            builder
201        };
202        let body = ::aws_smithy_types::body::SdkBody::from(
203            crate::protocol_serde::shape_get_session_token_input::ser_get_session_token_input_input_input(&input)?,
204        );
205        if let Some(content_length) = body.content_length() {
206            let content_length = content_length.to_string();
207            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
208        }
209        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
210    }
211}
212#[derive(Debug)]
213struct GetSessionTokenEndpointParamsInterceptor;
214
215impl ::aws_smithy_runtime_api::client::interceptors::Intercept for GetSessionTokenEndpointParamsInterceptor {
216    fn name(&self) -> &'static str {
217        "GetSessionTokenEndpointParamsInterceptor"
218    }
219
220    fn read_before_execution(
221        &self,
222        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
223            '_,
224            ::aws_smithy_runtime_api::client::interceptors::context::Input,
225            ::aws_smithy_runtime_api::client::interceptors::context::Output,
226            ::aws_smithy_runtime_api::client::interceptors::context::Error,
227        >,
228        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
229    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
230        let _input = context
231            .input()
232            .downcast_ref::<GetSessionTokenInput>()
233            .ok_or("failed to downcast to GetSessionTokenInput")?;
234
235        let params = crate::config::endpoint::Params::builder()
236            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
237            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
238            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
239            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
240            .build()
241            .map_err(|err| {
242                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
243            })?;
244        cfg.interceptor_state()
245            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
246        ::std::result::Result::Ok(())
247    }
248}
249
250// The get_* functions below are generated from JMESPath expressions in the
251// operationContextParams trait. They target the operation's input shape.
252
253/// Error type for the `GetSessionTokenError` operation.
254#[non_exhaustive]
255#[derive(::std::fmt::Debug)]
256pub enum GetSessionTokenError {
257    /// <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>
258    RegionDisabledException(crate::types::error::RegionDisabledException),
259    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
260    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
261    variable wildcard pattern and check `.code()`:
262     \
263    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
264     \
265    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-GetSessionTokenError) for what information is available for the error.")]
266    Unhandled(crate::error::sealed_unhandled::Unhandled),
267}
268impl GetSessionTokenError {
269    /// Creates the `GetSessionTokenError::Unhandled` variant from any error type.
270    pub fn unhandled(
271        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
272    ) -> Self {
273        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
274            source: err.into(),
275            meta: ::std::default::Default::default(),
276        })
277    }
278
279    /// Creates the `GetSessionTokenError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
280    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
281        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
282            source: err.clone().into(),
283            meta: err,
284        })
285    }
286    ///
287    /// Returns error metadata, which includes the error code, message,
288    /// request ID, and potentially additional information.
289    ///
290    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
291        match self {
292            Self::RegionDisabledException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
293            Self::Unhandled(e) => &e.meta,
294        }
295    }
296    /// Returns `true` if the error kind is `GetSessionTokenError::RegionDisabledException`.
297    pub fn is_region_disabled_exception(&self) -> bool {
298        matches!(self, Self::RegionDisabledException(_))
299    }
300}
301impl ::std::error::Error for GetSessionTokenError {
302    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
303        match self {
304            Self::RegionDisabledException(_inner) => ::std::option::Option::Some(_inner),
305            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
306        }
307    }
308}
309impl ::std::fmt::Display for GetSessionTokenError {
310    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
311        match self {
312            Self::RegionDisabledException(_inner) => _inner.fmt(f),
313            Self::Unhandled(_inner) => {
314                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
315                    write!(f, "unhandled error ({code})")
316                } else {
317                    f.write_str("unhandled error")
318                }
319            }
320        }
321    }
322}
323impl ::aws_smithy_types::retry::ProvideErrorKind for GetSessionTokenError {
324    fn code(&self) -> ::std::option::Option<&str> {
325        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
326    }
327    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
328        ::std::option::Option::None
329    }
330}
331impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for GetSessionTokenError {
332    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
333        match self {
334            Self::RegionDisabledException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
335            Self::Unhandled(_inner) => &_inner.meta,
336        }
337    }
338}
339impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for GetSessionTokenError {
340    fn create_unhandled_error(
341        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
342        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
343    ) -> Self {
344        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
345            source,
346            meta: meta.unwrap_or_default(),
347        })
348    }
349}
350impl ::aws_types::request_id::RequestId for crate::operation::get_session_token::GetSessionTokenError {
351    fn request_id(&self) -> Option<&str> {
352        self.meta().request_id()
353    }
354}
355
356pub use crate::operation::get_session_token::_get_session_token_output::GetSessionTokenOutput;
357
358pub use crate::operation::get_session_token::_get_session_token_input::GetSessionTokenInput;
359
360mod _get_session_token_input;
361
362mod _get_session_token_output;
363
364/// Builders
365pub mod builders;