aws_sdk_signin/operation/
create_o_auth2_token.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `CreateOAuth2Token`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct CreateOAuth2Token;
6impl CreateOAuth2Token {
7    /// Creates a new `CreateOAuth2Token`
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::create_o_auth2_token::CreateOAuth2TokenInput,
14                    ) -> ::std::result::Result<crate::operation::create_o_auth2_token::CreateOAuth2TokenOutput, ::aws_smithy_runtime_api::client::result::SdkError<crate::operation::create_o_auth2_token::CreateOAuth2TokenError, ::aws_smithy_runtime_api::client::orchestrator::HttpResponse>> {
15                        let map_err = |err: ::aws_smithy_runtime_api::client::result::SdkError<::aws_smithy_runtime_api::client::interceptors::context::Error, ::aws_smithy_runtime_api::client::orchestrator::HttpResponse>| {
16                            err.map_service_error(|err| {
17                                err.downcast::<crate::operation::create_o_auth2_token::CreateOAuth2TokenError>().expect("correct error type")
18                            })
19                        };
20                        let context = Self::orchestrate_with_stop_point(runtime_plugins, input, ::aws_smithy_runtime::client::orchestrator::StopPoint::None)
21                            .await
22                            .map_err(map_err)?;
23                        let output = context.finalize().map_err(map_err)?;
24                        ::std::result::Result::Ok(output.downcast::<crate::operation::create_o_auth2_token::CreateOAuth2TokenOutput>().expect("correct output type"))
25                    }
26    
27                    pub(crate) async fn orchestrate_with_stop_point(
28                        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
29                        input: crate::operation::create_o_auth2_token::CreateOAuth2TokenInput,
30                        stop_point: ::aws_smithy_runtime::client::orchestrator::StopPoint,
31                    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::interceptors::context::InterceptorContext, ::aws_smithy_runtime_api::client::result::SdkError<::aws_smithy_runtime_api::client::interceptors::context::Error, ::aws_smithy_runtime_api::client::orchestrator::HttpResponse>> {
32                        let input = ::aws_smithy_runtime_api::client::interceptors::context::Input::erase(input);
33                        use ::tracing::Instrument;
34                        ::aws_smithy_runtime::client::orchestrator::invoke_with_stop_point(
35                            "Signin",
36                            "CreateOAuth2Token",
37                            input,
38                            runtime_plugins,
39                            stop_point
40                        )
41                        // Create a parent span for the entire operation. Includes a random, internal-only,
42                        // seven-digit ID for the operation orchestration so that it can be correlated in the logs.
43                        .instrument(::tracing::debug_span!(
44                                "Signin.CreateOAuth2Token",
45                                "rpc.service" = "Signin",
46                                "rpc.method" = "CreateOAuth2Token",
47                                "sdk_invocation_id" = ::fastrand::u32(1_000_000..10_000_000),
48                                "rpc.system" = "aws-api",
49                            ))
50                        .await
51                    }
52    
53                    pub(crate) fn operation_runtime_plugins(
54                        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
55                        client_config: &crate::config::Config,
56                        config_override: ::std::option::Option<crate::config::Builder>,
57                    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
58                        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
59                        
60                        if let ::std::option::Option::Some(config_override) = config_override {
61                            for plugin in config_override.runtime_plugins.iter().cloned() {
62                                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
63                            }
64                            runtime_plugins = runtime_plugins.with_operation_plugin(
65                                crate::config::ConfigOverrideRuntimePlugin::new(config_override, client_config.config.clone(), &client_config.runtime_components)
66                            );
67                        }
68                        runtime_plugins
69                    }
70}
71impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for CreateOAuth2Token {
72                fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
73                    let mut cfg = ::aws_smithy_types::config_bag::Layer::new("CreateOAuth2Token");
74
75                    cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(CreateOAuth2TokenRequestSerializer));
76                    cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(CreateOAuth2TokenResponseDeserializer));
77
78                    cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
79                        crate::config::auth::Params::builder()
80                            .operation_name("CreateOAuth2Token")
81                            .build()
82                            .expect("required fields set")
83                    ));
84
85                    cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::SensitiveOutput);
86cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
87                            "CreateOAuth2Token",
88                            "Signin",
89                        ));
90
91                    ::std::option::Option::Some(cfg.freeze())
92                }
93
94                fn runtime_components(&self, _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
95                    #[allow(unused_mut)]
96                    let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("CreateOAuth2Token")
97                            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default()))
98.with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(CreateOAuth2TokenEndpointParamsInterceptor))
99                            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<crate::operation::create_o_auth2_token::CreateOAuth2TokenError>::new())
100.with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<crate::operation::create_o_auth2_token::CreateOAuth2TokenError>::new())
101.with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<crate::operation::create_o_auth2_token::CreateOAuth2TokenError>::new());
102
103                    ::std::borrow::Cow::Owned(rcb)
104                }
105            }
106
107            
108#[derive(Debug)]
109            struct CreateOAuth2TokenResponseDeserializer;
110            impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for CreateOAuth2TokenResponseDeserializer {
111                
112
113                fn deserialize_nonstreaming(&self, response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
114                    let (success, status) = (response.status().is_success(), response.status().as_u16());
115            let headers = response.headers();
116            let body = response.body().bytes().expect("body loaded");
117            #[allow(unused_mut)]
118            let mut force_error = false;
119            ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
120            let parse_result = if !success && status != 200 || force_error {
121                crate::protocol_serde::shape_create_o_auth2_token::de_create_o_auth2_token_http_error(status, headers, body)
122            } else {
123                crate::protocol_serde::shape_create_o_auth2_token::de_create_o_auth2_token_http_response(status, headers, body)
124            };
125            crate::protocol_serde::type_erase_result(parse_result)
126                }
127            }
128#[derive(Debug)]
129            struct CreateOAuth2TokenRequestSerializer;
130            impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for CreateOAuth2TokenRequestSerializer {
131                #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
132                fn serialize_input(&self, input: ::aws_smithy_runtime_api::client::interceptors::context::Input, _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
133                    let input = input.downcast::<crate::operation::create_o_auth2_token::CreateOAuth2TokenInput>().expect("correct type");
134                    let _header_serialization_settings = _cfg.load::<crate::serialization_settings::HeaderSerializationSettings>().cloned().unwrap_or_default();
135                    let mut request_builder = {
136                        #[allow(clippy::uninlined_format_args)]
137fn uri_base(_input: &crate::operation::create_o_auth2_token::CreateOAuth2TokenInput, output: &mut ::std::string::String) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
138    use ::std::fmt::Write as _;
139    ::std::write!(output, "/v1/token").expect("formatting should succeed");
140    ::std::result::Result::Ok(())
141}
142#[allow(clippy::unnecessary_wraps)]
143fn update_http_builder(
144                input: &crate::operation::create_o_auth2_token::CreateOAuth2TokenInput,
145                builder: ::http_1x::request::Builder
146            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
147    let mut uri = ::std::string::String::new();
148    uri_base(input, &mut uri)?;
149    ::std::result::Result::Ok(builder.method("POST").uri(uri))
150}
151let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
152builder = _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/json");
153builder
154                    };
155                    let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_create_o_auth2_token_input::ser_token_input_http_payload(& input.token_input)?);
156                    if let Some(content_length) = body.content_length() {
157                                let content_length = content_length.to_string();
158                                request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
159                            }
160                    ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
161                }
162            }
163#[derive(Debug)]
164            struct CreateOAuth2TokenEndpointParamsInterceptor;
165
166            #[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
167            impl ::aws_smithy_runtime_api::client::interceptors::Intercept for CreateOAuth2TokenEndpointParamsInterceptor {
168                fn name(&self) -> &'static str {
169                    "CreateOAuth2TokenEndpointParamsInterceptor"
170                }
171
172                fn read_before_execution(
173                    &self,
174                    context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<'_, ::aws_smithy_runtime_api::client::interceptors::context::Input, ::aws_smithy_runtime_api::client::interceptors::context::Output, ::aws_smithy_runtime_api::client::interceptors::context::Error>,
175                    cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
176                ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
177                    let _input = context.input()
178                        .downcast_ref::<CreateOAuth2TokenInput>()
179                        .ok_or("failed to downcast to CreateOAuth2TokenInput")?;
180
181                    
182
183                    let params = crate::config::endpoint::Params::builder()
184                        .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
185.set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
186.set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
187.set_region(cfg.load::<::aws_types::region::Region>().map(|r|r.as_ref().to_owned()))
188                        .build()
189                        .map_err(|err| ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err))?;
190                    cfg.interceptor_state().store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
191                    ::std::result::Result::Ok(())
192                }
193            }
194
195            // The get_* functions below are generated from JMESPath expressions in the
196            // operationContextParams trait. They target the operation's input shape.
197
198            
199
200/// Error type for the `CreateOAuth2TokenError` operation.
201#[non_exhaustive]
202#[derive(::std::fmt::Debug)]
203pub enum CreateOAuth2TokenError {
204    /// Error thrown for access denied scenarios with flexible HTTP status mapping Runtime HTTP Status Code Mapping: - HTTP 401 (Unauthorized): TOKEN_EXPIRED, AUTHCODE_EXPIRED - HTTP 403 (Forbidden): USER_CREDENTIALS_CHANGED, INSUFFICIENT_PERMISSIONS The specific HTTP status code is determined at runtime based on the error enum value. Consumers should use the error field to determine the specific access denial reason.
205    AccessDeniedException(crate::types::error::AccessDeniedException),
206    /// Error thrown when an internal server error occurs HTTP Status Code: 500 Internal Server Error Used for unexpected server-side errors that prevent request processing.
207    InternalServerException(crate::types::error::InternalServerException),
208    /// Error thrown when rate limit is exceeded HTTP Status Code: 429 Too Many Requests Possible OAuth2ErrorCode values: - INVALID_REQUEST: Rate limiting, too many requests, abuse prevention Possible causes: - Too many token requests from the same client - Rate limiting based on client_id or IP address - Abuse prevention mechanisms triggered - Service protection against excessive token generation
209    TooManyRequestsError(crate::types::error::TooManyRequestsError),
210    /// Error thrown when request validation fails HTTP Status Code: 400 Bad Request Used for request validation errors such as malformed parameters, missing required fields, or invalid parameter values.
211    ValidationException(crate::types::error::ValidationException),
212    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
213                    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
214    variable wildcard pattern and check `.code()`:
215     \
216    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
217     \
218    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-CreateOAuth2TokenError) for what information is available for the error.")]
219                    Unhandled(crate::error::sealed_unhandled::Unhandled),
220}
221impl CreateOAuth2TokenError {
222    /// Creates the `CreateOAuth2TokenError::Unhandled` variant from any error type.
223                    pub fn unhandled(err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>) -> Self {
224                        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source: err.into(), meta: ::std::default::Default::default() })
225                    }
226    
227                    /// Creates the `CreateOAuth2TokenError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
228                    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
229                        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source: err.clone().into(), meta: err })
230                    }
231    /// 
232    /// Returns error metadata, which includes the error code, message,
233    /// request ID, and potentially additional information.
234    /// 
235    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
236        match self {
237            Self::AccessDeniedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
238            Self::InternalServerException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
239            Self::TooManyRequestsError(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
240            Self::ValidationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
241            Self::Unhandled(e) => &e.meta,
242        }
243    }
244    /// Returns `true` if the error kind is `CreateOAuth2TokenError::AccessDeniedException`.
245    pub fn is_access_denied_exception(&self) -> bool {
246        matches!(self, Self::AccessDeniedException(_))
247    }
248    /// Returns `true` if the error kind is `CreateOAuth2TokenError::InternalServerException`.
249    pub fn is_internal_server_exception(&self) -> bool {
250        matches!(self, Self::InternalServerException(_))
251    }
252    /// Returns `true` if the error kind is `CreateOAuth2TokenError::TooManyRequestsError`.
253    pub fn is_too_many_requests_error(&self) -> bool {
254        matches!(self, Self::TooManyRequestsError(_))
255    }
256    /// Returns `true` if the error kind is `CreateOAuth2TokenError::ValidationException`.
257    pub fn is_validation_exception(&self) -> bool {
258        matches!(self, Self::ValidationException(_))
259    }
260}
261impl ::std::error::Error for CreateOAuth2TokenError {
262    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
263        match self {
264            Self::AccessDeniedException(_inner) =>
265            ::std::option::Option::Some(_inner)
266            ,
267            Self::InternalServerException(_inner) =>
268            ::std::option::Option::Some(_inner)
269            ,
270            Self::TooManyRequestsError(_inner) =>
271            ::std::option::Option::Some(_inner)
272            ,
273            Self::ValidationException(_inner) =>
274            ::std::option::Option::Some(_inner)
275            ,
276            Self::Unhandled(_inner) => {
277                ::std::option::Option::Some(&*_inner.source)
278            }
279        }
280    }
281}
282impl ::std::fmt::Display for CreateOAuth2TokenError {
283    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
284        match self {
285            Self::AccessDeniedException(_inner) =>
286            _inner.fmt(f)
287            ,
288            Self::InternalServerException(_inner) =>
289            _inner.fmt(f)
290            ,
291            Self::TooManyRequestsError(_inner) =>
292            _inner.fmt(f)
293            ,
294            Self::ValidationException(_inner) =>
295            _inner.fmt(f)
296            ,
297            Self::Unhandled(_inner) => {
298                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
299                                                        write!(f, "unhandled error ({code})")
300                                                    } else {
301                                                        f.write_str("unhandled error")
302                                                    }
303            }
304        }
305    }
306}
307impl ::aws_smithy_types::retry::ProvideErrorKind for CreateOAuth2TokenError {
308    fn code(&self) -> ::std::option::Option<&str> {
309        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
310    }
311    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
312        ::std::option::Option::None
313    }
314}
315impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for CreateOAuth2TokenError {
316    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
317        match self {
318            Self::AccessDeniedException(_inner) =>
319            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
320            ,
321            Self::InternalServerException(_inner) =>
322            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
323            ,
324            Self::TooManyRequestsError(_inner) =>
325            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
326            ,
327            Self::ValidationException(_inner) =>
328            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
329            ,
330            Self::Unhandled(_inner) => {
331                &_inner.meta
332            }
333        }
334    }
335}
336impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for CreateOAuth2TokenError {
337    fn create_unhandled_error(
338                        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
339                        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>
340                    ) -> Self {
341        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source, meta: meta.unwrap_or_default() })
342    }
343}
344impl ::aws_types::request_id::RequestId for crate::operation::create_o_auth2_token::CreateOAuth2TokenError {
345                                fn request_id(&self) -> Option<&str> {
346                                    self.meta().request_id()
347                                }
348                            }
349
350pub use crate::operation::create_o_auth2_token::_create_o_auth2_token_input::CreateOAuth2TokenInput;
351
352pub use crate::operation::create_o_auth2_token::_create_o_auth2_token_output::CreateOAuth2TokenOutput;
353
354mod _create_o_auth2_token_input;
355
356mod _create_o_auth2_token_output;
357
358/// Builders
359pub mod builders;
360