aws_sdk_sso/config/
auth.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Auth scheme resolver trait specific to AWS Single Sign-On
3pub trait ResolveAuthScheme: ::std::marker::Send + ::std::marker::Sync + ::std::fmt::Debug {
4    /// Resolve a priority list of auth scheme options with the given parameters
5    fn resolve_auth_scheme<'a>(
6        &'a self,
7        params: &'a crate::config::auth::Params,
8        cfg: &'a ::aws_smithy_types::config_bag::ConfigBag,
9        runtime_components: &'a ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponents,
10    ) -> ::aws_smithy_runtime_api::client::auth::AuthSchemeOptionsFuture<'a>;
11
12    /// Convert this service-specific resolver into a `SharedAuthSchemeOptionResolver`
13    fn into_shared_resolver(self) -> ::aws_smithy_runtime_api::client::auth::SharedAuthSchemeOptionResolver
14    where
15        Self: ::std::marker::Sized + 'static,
16    {
17        ::aws_smithy_runtime_api::client::auth::SharedAuthSchemeOptionResolver::new(DowncastParams(self))
18    }
19}
20
21#[derive(Debug)]
22struct DowncastParams<T>(T);
23impl<T> ::aws_smithy_runtime_api::client::auth::ResolveAuthSchemeOptions for DowncastParams<T>
24where
25    T: ResolveAuthScheme,
26{
27    fn resolve_auth_scheme_options_v2<'a>(
28        &'a self,
29        params: &'a ::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams,
30        cfg: &'a ::aws_smithy_types::config_bag::ConfigBag,
31        runtime_components: &'a ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponents,
32    ) -> ::aws_smithy_runtime_api::client::auth::AuthSchemeOptionsFuture<'a> {
33        match params.get::<crate::config::auth::Params>() {
34            ::std::option::Option::Some(concrete_params) => self.0.resolve_auth_scheme(concrete_params, cfg, runtime_components),
35            ::std::option::Option::None => ::aws_smithy_runtime_api::client::auth::AuthSchemeOptionsFuture::ready(::std::result::Result::Err(
36                "params of expected type was not present".into(),
37            )),
38        }
39    }
40}
41
42/// The default auth scheme resolver
43#[derive(Debug)]
44#[allow(dead_code)]
45pub struct DefaultAuthSchemeResolver {
46    service_defaults: Vec<::aws_smithy_runtime_api::client::auth::AuthSchemeOption>,
47    operation_overrides: ::std::collections::HashMap<&'static str, Vec<::aws_smithy_runtime_api::client::auth::AuthSchemeOption>>,
48}
49
50// TODO(https://github.com/smithy-lang/smithy-rs/issues/4177): Remove `allow(...)` once the issue is addressed.
51// When generating code for tests (e.g., `codegen-client-test`), this manual implementation
52// of the `Default` trait may appear as if it could be derived automatically.
53// However, that is not the case in production.
54#[allow(clippy::derivable_impls)]
55impl Default for DefaultAuthSchemeResolver {
56    fn default() -> Self {
57        Self {
58            service_defaults: vec![::aws_smithy_runtime_api::client::auth::AuthSchemeOption::builder()
59                .scheme_id(::aws_runtime::auth::sigv4::SCHEME_ID)
60                .build()
61                .expect("required fields set")],
62            operation_overrides: [
63                (
64                    "GetRoleCredentials",
65                    vec![::aws_smithy_runtime_api::client::auth::AuthSchemeOption::from(
66                        ::aws_smithy_runtime::client::auth::no_auth::NO_AUTH_SCHEME_ID,
67                    )],
68                ),
69                (
70                    "ListAccountRoles",
71                    vec![::aws_smithy_runtime_api::client::auth::AuthSchemeOption::from(
72                        ::aws_smithy_runtime::client::auth::no_auth::NO_AUTH_SCHEME_ID,
73                    )],
74                ),
75                (
76                    "ListAccounts",
77                    vec![::aws_smithy_runtime_api::client::auth::AuthSchemeOption::from(
78                        ::aws_smithy_runtime::client::auth::no_auth::NO_AUTH_SCHEME_ID,
79                    )],
80                ),
81                (
82                    "Logout",
83                    vec![::aws_smithy_runtime_api::client::auth::AuthSchemeOption::from(
84                        ::aws_smithy_runtime::client::auth::no_auth::NO_AUTH_SCHEME_ID,
85                    )],
86                ),
87            ]
88            .into(),
89        }
90    }
91}
92
93impl crate::config::auth::ResolveAuthScheme for DefaultAuthSchemeResolver {
94    fn resolve_auth_scheme<'a>(
95        &'a self,
96        params: &'a crate::config::auth::Params,
97        _cfg: &'a ::aws_smithy_types::config_bag::ConfigBag,
98        _runtime_components: &'a ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponents,
99    ) -> ::aws_smithy_runtime_api::client::auth::AuthSchemeOptionsFuture<'a> {
100        let operation_name = params.operation_name();
101
102        let modeled_auth_options = match self.operation_overrides.get(operation_name) {
103            Some(overrides) => overrides,
104            None => &self.service_defaults,
105        };
106
107        let _fut = ::aws_smithy_runtime_api::client::auth::AuthSchemeOptionsFuture::ready(Ok(modeled_auth_options.clone()));
108
109        _fut
110    }
111}
112
113/// Configuration parameters for resolving the correct auth scheme
114#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
115pub struct Params {
116    operation_name: ::std::borrow::Cow<'static, str>,
117}
118impl Params {
119    /// Create a builder for [`Params`]
120    pub fn builder() -> crate::config::auth::ParamsBuilder {
121        crate::config::auth::ParamsBuilder::default()
122    }
123
124    /// Return the operation name for [`Params`]
125    pub fn operation_name(&self) -> &str {
126        self.operation_name.as_ref()
127    }
128}
129
130#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
131/// Builder for [`Params`]
132pub struct ParamsBuilder {
133    operation_name: ::std::option::Option<::std::borrow::Cow<'static, str>>,
134}
135impl ParamsBuilder {
136    /// Set the operation name for the builder
137    pub fn operation_name(self, operation_name: impl Into<::std::borrow::Cow<'static, str>>) -> Self {
138        self.set_operation_name(::std::option::Option::Some(operation_name.into()))
139    }
140
141    /// Set the operation name for the builder
142    pub fn set_operation_name(mut self, operation_name: ::std::option::Option<::std::borrow::Cow<'static, str>>) -> Self {
143        self.operation_name = operation_name;
144        self
145    }
146    /// Consume this builder, create [`Params`]."
147    ///
148    /// Return [`BuildError`] if any of the required fields are unset.
149    ///
150    pub fn build(self) -> ::std::result::Result<crate::config::auth::Params, crate::config::auth::BuildError> {
151        ::std::result::Result::Ok(crate::config::auth::Params {
152            operation_name: self.operation_name.ok_or_else(|| BuildError::missing("operation_name"))?,
153        })
154    }
155}
156
157/// An error that occurred while constructing `config::auth::Params`
158#[derive(Debug)]
159pub struct BuildError {
160    field: ::std::borrow::Cow<'static, str>,
161}
162
163impl BuildError {
164    fn missing(field: &'static str) -> Self {
165        Self { field: field.into() }
166    }
167}
168
169impl std::fmt::Display for BuildError {
170    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
171        write!(f, "a required field was missing: `{}`", self.field)
172    }
173}
174
175impl std::error::Error for BuildError {}