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