Skip to main content

aws_sdk_signin/config/
endpoint.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2pub use ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver;
3                pub use ::aws_smithy_runtime_api::client::endpoint::EndpointFuture;
4                pub use ::aws_smithy_types::endpoint::Endpoint;
5
6/// Interceptor that tracks endpoint override business metric.
7                #[derive(Debug, Default)]
8                pub(crate) struct EndpointOverrideFeatureTrackerInterceptor;
9
10                #[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
11                impl ::aws_smithy_runtime_api::client::interceptors::Intercept for EndpointOverrideFeatureTrackerInterceptor {
12                    fn name(&self) -> &'static str {
13                        "EndpointOverrideFeatureTrackerInterceptor"
14                    }
15
16                    fn read_before_execution(
17                        &self,
18                        _context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<'_>,
19                        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
20                    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
21                        if cfg.load::<::aws_types::endpoint_config::EndpointUrl>().is_some() {
22                            cfg.interceptor_state()
23                                .store_append(::aws_runtime::sdk_feature::AwsSdkFeature::EndpointOverride);
24                        }
25                        ::std::result::Result::Ok(())
26                    }
27                }
28
29#[cfg(test)]
30mod test {
31
32    /// Control Plane operation in us-east-1 (aws partition)
33                    #[test]
34                    fn test_1() {
35                        let params = crate::config::endpoint::Params::builder()
36    .is_control_plane(true)
37    .region("us-east-1".to_string())
38    .use_fips(false)
39    .use_dual_stack(false)
40    .build().expect("invalid params");
41                        let resolver = crate::config::endpoint::DefaultResolver::new();
42                        let endpoint = resolver.resolve_endpoint(&params);
43                        let endpoint = endpoint.expect("Expected valid endpoint: https://signin.us-east-1.api.aws");
44                                    assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://signin.us-east-1.api.aws")
45    .auth_scheme(::aws_smithy_types::endpoint::EndpointAuthScheme::with_capacity("sigv4", 2)
46    .put("signingName", "signin".to_string())
47    .put("signingRegion", "us-east-1".to_string())
48    )
49    .build());
50                    }
51
52    /// Control Plane operation in cn-north-1 (aws-cn partition)
53                    #[test]
54                    fn test_2() {
55                        let params = crate::config::endpoint::Params::builder()
56    .is_control_plane(true)
57    .region("cn-north-1".to_string())
58    .use_fips(false)
59    .use_dual_stack(false)
60    .build().expect("invalid params");
61                        let resolver = crate::config::endpoint::DefaultResolver::new();
62                        let endpoint = resolver.resolve_endpoint(&params);
63                        let endpoint = endpoint.expect("Expected valid endpoint: https://signin.cn-north-1.api.amazonwebservices.com.cn");
64                                    assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://signin.cn-north-1.api.amazonwebservices.com.cn")
65    .auth_scheme(::aws_smithy_types::endpoint::EndpointAuthScheme::with_capacity("sigv4", 2)
66    .put("signingName", "signin".to_string())
67    .put("signingRegion", "cn-north-1".to_string())
68    )
69    .build());
70                    }
71
72    /// Data Plane operation in us-east-1
73                    #[test]
74                    fn test_3() {
75                        let params = crate::config::endpoint::Params::builder()
76    .is_control_plane(false)
77    .region("us-east-1".to_string())
78    .use_fips(false)
79    .use_dual_stack(false)
80    .build().expect("invalid params");
81                        let resolver = crate::config::endpoint::DefaultResolver::new();
82                        let endpoint = resolver.resolve_endpoint(&params);
83                        let endpoint = endpoint.expect("Expected valid endpoint: https://us-east-1.signin.aws.amazon.com");
84                                    assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://us-east-1.signin.aws.amazon.com")
85    .build());
86                    }
87
88    /// Data Plane operation in us-east-1 (IsControlPlane not set)
89                    #[test]
90                    fn test_4() {
91                        let params = crate::config::endpoint::Params::builder()
92    .region("us-east-1".to_string())
93    .use_fips(false)
94    .use_dual_stack(false)
95    .build().expect("invalid params");
96                        let resolver = crate::config::endpoint::DefaultResolver::new();
97                        let endpoint = resolver.resolve_endpoint(&params);
98                        let endpoint = endpoint.expect("Expected valid endpoint: https://us-east-1.signin.aws.amazon.com");
99                                    assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://us-east-1.signin.aws.amazon.com")
100    .build());
101                    }
102
103    /// Data Plane operation in cn-north-1
104                    #[test]
105                    fn test_5() {
106                        let params = crate::config::endpoint::Params::builder()
107    .is_control_plane(false)
108    .region("cn-north-1".to_string())
109    .use_fips(false)
110    .use_dual_stack(false)
111    .build().expect("invalid params");
112                        let resolver = crate::config::endpoint::DefaultResolver::new();
113                        let endpoint = resolver.resolve_endpoint(&params);
114                        let endpoint = endpoint.expect("Expected valid endpoint: https://cn-north-1.signin.amazonaws.cn");
115                                    assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://cn-north-1.signin.amazonaws.cn")
116    .build());
117                    }
118
119    /// Data Plane operation in us-gov-west-1
120                    #[test]
121                    fn test_6() {
122                        let params = crate::config::endpoint::Params::builder()
123    .is_control_plane(false)
124    .region("us-gov-west-1".to_string())
125    .use_fips(false)
126    .use_dual_stack(false)
127    .build().expect("invalid params");
128                        let resolver = crate::config::endpoint::DefaultResolver::new();
129                        let endpoint = resolver.resolve_endpoint(&params);
130                        let endpoint = endpoint.expect("Expected valid endpoint: https://us-gov-west-1.signin.amazonaws-us-gov.com");
131                                    assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://us-gov-west-1.signin.amazonaws-us-gov.com")
132    .build());
133                    }
134
135    /// FIPS endpoint in us-gov-west-1 (global endpoint)
136                    #[test]
137                    fn test_7() {
138                        let params = crate::config::endpoint::Params::builder()
139    .region("us-gov-west-1".to_string())
140    .use_fips(true)
141    .use_dual_stack(false)
142    .build().expect("invalid params");
143                        let resolver = crate::config::endpoint::DefaultResolver::new();
144                        let endpoint = resolver.resolve_endpoint(&params);
145                        let endpoint = endpoint.expect("Expected valid endpoint: https://signin-fips.amazonaws-us-gov.com");
146                                    assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://signin-fips.amazonaws-us-gov.com")
147    .build());
148                    }
149
150    /// FIPS endpoint in us-gov-east-1 (regional endpoint)
151                    #[test]
152                    fn test_8() {
153                        let params = crate::config::endpoint::Params::builder()
154    .region("us-gov-east-1".to_string())
155    .use_fips(true)
156    .use_dual_stack(false)
157    .build().expect("invalid params");
158                        let resolver = crate::config::endpoint::DefaultResolver::new();
159                        let endpoint = resolver.resolve_endpoint(&params);
160                        let endpoint = endpoint.expect("Expected valid endpoint: https://us-gov-east-1.signin-fips.amazonaws-us-gov.com");
161                                    assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://us-gov-east-1.signin-fips.amazonaws-us-gov.com")
162    .build());
163                    }
164
165    /// FIPS endpoint in us-east-1
166                    #[test]
167                    fn test_9() {
168                        let params = crate::config::endpoint::Params::builder()
169    .region("us-east-1".to_string())
170    .use_fips(true)
171    .use_dual_stack(false)
172    .build().expect("invalid params");
173                        let resolver = crate::config::endpoint::DefaultResolver::new();
174                        let endpoint = resolver.resolve_endpoint(&params);
175                        let endpoint = endpoint.expect("Expected valid endpoint: https://signin-fips.us-east-1.amazonaws.com");
176                                    assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://signin-fips.us-east-1.amazonaws.com")
177    .build());
178                    }
179
180    /// DualStack falls through to default SDK endpoint in us-east-1 (aws partition)
181                    #[test]
182                    fn test_10() {
183                        let params = crate::config::endpoint::Params::builder()
184    .region("us-east-1".to_string())
185    .use_fips(false)
186    .use_dual_stack(true)
187    .build().expect("invalid params");
188                        let resolver = crate::config::endpoint::DefaultResolver::new();
189                        let endpoint = resolver.resolve_endpoint(&params);
190                        let endpoint = endpoint.expect("Expected valid endpoint: https://signin.us-east-1.api.aws");
191                                    assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://signin.us-east-1.api.aws")
192    .build());
193                    }
194
195    /// DualStack falls through to default SDK endpoint in cn-north-1 (aws-cn partition)
196                    #[test]
197                    fn test_11() {
198                        let params = crate::config::endpoint::Params::builder()
199    .region("cn-north-1".to_string())
200    .use_fips(false)
201    .use_dual_stack(true)
202    .build().expect("invalid params");
203                        let resolver = crate::config::endpoint::DefaultResolver::new();
204                        let endpoint = resolver.resolve_endpoint(&params);
205                        let endpoint = endpoint.expect("Expected valid endpoint: https://signin.cn-north-1.api.amazonwebservices.com.cn");
206                                    assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://signin.cn-north-1.api.amazonwebservices.com.cn")
207    .build());
208                    }
209
210    /// DualStack falls through to default SDK endpoint in us-gov-west-1 (aws-us-gov partition)
211                    #[test]
212                    fn test_12() {
213                        let params = crate::config::endpoint::Params::builder()
214    .region("us-gov-west-1".to_string())
215    .use_fips(false)
216    .use_dual_stack(true)
217    .build().expect("invalid params");
218                        let resolver = crate::config::endpoint::DefaultResolver::new();
219                        let endpoint = resolver.resolve_endpoint(&params);
220                        let endpoint = endpoint.expect("Expected valid endpoint: https://signin.us-gov-west-1.api.aws");
221                                    assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://signin.us-gov-west-1.api.aws")
222    .build());
223                    }
224
225    /// Custom SDK endpoint override
226                    #[test]
227                    fn test_13() {
228                        let params = crate::config::endpoint::Params::builder()
229    .region("us-east-1".to_string())
230    .endpoint("https://custom.signin.example.com".to_string())
231    .use_fips(false)
232    .use_dual_stack(false)
233    .build().expect("invalid params");
234                        let resolver = crate::config::endpoint::DefaultResolver::new();
235                        let endpoint = resolver.resolve_endpoint(&params);
236                        let endpoint = endpoint.expect("Expected valid endpoint: https://custom.signin.example.com");
237                                    assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://custom.signin.example.com")
238    .build());
239                    }
240
241    /// ISO partition (us-iso-east-1)
242                    #[test]
243                    fn test_14() {
244                        let params = crate::config::endpoint::Params::builder()
245    .region("us-iso-east-1".to_string())
246    .use_fips(false)
247    .use_dual_stack(false)
248    .build().expect("invalid params");
249                        let resolver = crate::config::endpoint::DefaultResolver::new();
250                        let endpoint = resolver.resolve_endpoint(&params);
251                        let endpoint = endpoint.expect("Expected valid endpoint: https://us-iso-east-1.signin.c2shome.ic.gov");
252                                    assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://us-iso-east-1.signin.c2shome.ic.gov")
253    .build());
254                    }
255
256    /// ISO-B partition (us-isob-east-1)
257                    #[test]
258                    fn test_15() {
259                        let params = crate::config::endpoint::Params::builder()
260    .region("us-isob-east-1".to_string())
261    .use_fips(false)
262    .use_dual_stack(false)
263    .build().expect("invalid params");
264                        let resolver = crate::config::endpoint::DefaultResolver::new();
265                        let endpoint = resolver.resolve_endpoint(&params);
266                        let endpoint = endpoint.expect("Expected valid endpoint: https://us-isob-east-1.signin.sc2shome.sgov.gov");
267                                    assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://us-isob-east-1.signin.sc2shome.sgov.gov")
268    .build());
269                    }
270
271
272}
273
274/// Endpoint resolver trait specific to AWS Sign-In Service
275            pub trait ResolveEndpoint: ::std::marker::Send + ::std::marker::Sync + ::std::fmt::Debug {
276                /// Resolve an endpoint with the given parameters
277                fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a>;
278
279                /// Convert this service-specific resolver into a `SharedEndpointResolver`
280                ///
281                /// The resulting resolver will downcast `EndpointResolverParams` into `crate::config::endpoint::Params`.
282                fn into_shared_resolver(self) -> ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver
283                where
284                    Self: Sized + 'static,
285                {
286                    ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver::new(DowncastParams(self))
287                }
288            }
289
290            #[derive(Debug)]
291            struct DowncastParams<T>(T);
292            impl<T> ::aws_smithy_runtime_api::client::endpoint::ResolveEndpoint for DowncastParams<T>
293            where
294                T: ResolveEndpoint,
295            {
296                fn resolve_endpoint<'a>(&'a self, params: &'a ::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a> {
297                    let ep = match params.get::<crate::config::endpoint::Params>() {
298                        Some(params) => self.0.resolve_endpoint(params),
299                        None => ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(Err("params of expected type was not present".into())),
300                    };
301                    ep
302                }
303
304            }
305
306#[derive(Debug)]
307                /// The default endpoint resolver.
308                pub struct DefaultResolver {
309                    partition_resolver: &'static crate::endpoint_lib::partition::PartitionResolver,
310                    endpoint_cache: ::arc_swap::ArcSwap<::std::option::Option<(Params, ::aws_smithy_types::endpoint::Endpoint)>>,
311                }
312
313                 impl Default for DefaultResolver {
314                    fn default() -> Self {
315                        Self::new()
316                    }
317                 }
318
319                impl DefaultResolver {
320                    /// Create a new DefaultResolver
321                    pub fn new() -> Self {
322                        Self {
323                            partition_resolver: &crate::endpoint_lib::DEFAULT_PARTITION_RESOLVER,
324                            endpoint_cache: ::arc_swap::ArcSwap::from_pointee(None),
325                        }
326                    }
327
328                    #[allow(unused_variables, unused_parens, clippy::double_parens, clippy::useless_conversion, clippy::bool_comparison, clippy::comparison_to_empty, clippy::needless_borrow, clippy::useless_asref, clippy::redundant_closure_call, clippy::clone_on_copy, clippy::single_char_add_str)]
329                    fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::std::result::Result<::aws_smithy_types::endpoint::Endpoint, ::aws_smithy_runtime_api::box_error::BoxError> {
330                        let mut _diagnostic_collector = crate::endpoint_lib::diagnostic::DiagnosticCollector::new();
331                        #[allow(unused_mut)]
332                        let mut context = ConditionContext::default();
333
334                        // Param bindings
335                        let use_dual_stack = &params.use_dual_stack;
336let use_fips = &params.use_fips;
337let endpoint = &params.endpoint;
338let region = &params.region;
339let is_control_plane = &params.is_control_plane;
340
341                        let mut current_ref: i32 = 2;
342                        loop {
343                            match current_ref {
344                                ref_val if ref_val >= 100_000_000 => {
345                                    return match (ref_val - 100_000_000) as usize {
346                                        0 => ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("No endpoint rule matched")) as ::aws_smithy_runtime_api::box_error::BoxError),
3471 => {
348                            let region = params.region.as_deref().unwrap_or_default();
349                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
350out.push_str("https://signin.");
351#[allow(clippy::needless_borrow)]
352out.push_str(&region.as_ref());
353out.push_str(".api.aws");
354out })
355.auth_scheme(::aws_smithy_types::endpoint::EndpointAuthScheme::with_capacity("sigv4"
356.to_string(), 2)
357.put("signingName", "signin")
358.put("signingRegion", region.as_ref())
359)
360.build())
361                        },
3622 => {
363                            let region = params.region.as_deref().unwrap_or_default();
364                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
365out.push_str("https://signin.");
366#[allow(clippy::needless_borrow)]
367out.push_str(&region.as_ref());
368out.push_str(".api.amazonwebservices.com.cn");
369out })
370.auth_scheme(::aws_smithy_types::endpoint::EndpointAuthScheme::with_capacity("sigv4"
371.to_string(), 2)
372.put("signingName", "signin")
373.put("signingRegion", region.as_ref())
374)
375.build())
376                        },
3773 => {
378                            let region = params.region.as_deref().unwrap_or_default();
379let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
380                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
381out.push_str("https://signin.");
382#[allow(clippy::needless_borrow)]
383out.push_str(&region.as_ref());
384out.push_str(".");
385#[allow(clippy::needless_borrow)]
386out.push_str(&partition_result.dual_stack_dns_suffix());
387out })
388.auth_scheme(::aws_smithy_types::endpoint::EndpointAuthScheme::with_capacity("sigv4"
389.to_string(), 2)
390.put("signingName", "signin")
391.put("signingRegion", region.as_ref())
392)
393.build())
394                        },
3954 => {
396                            let region = params.region.as_deref().unwrap_or_default();
397                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
398out.push_str("https://");
399#[allow(clippy::needless_borrow)]
400out.push_str(&region.as_ref());
401out.push_str(".signin.aws.amazon.com");
402out })
403.build())
404                        },
4055 => {
406                            let region = params.region.as_deref().unwrap_or_default();
407                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
408out.push_str("https://");
409#[allow(clippy::needless_borrow)]
410out.push_str(&region.as_ref());
411out.push_str(".signin.amazonaws.cn");
412out })
413.build())
414                        },
4156 => {
416                            let region = params.region.as_deref().unwrap_or_default();
417                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
418out.push_str("https://");
419#[allow(clippy::needless_borrow)]
420out.push_str(&region.as_ref());
421out.push_str(".signin.amazonaws-us-gov.com");
422out })
423.build())
424                        },
4257 => {
426                            let region = params.region.as_deref().unwrap_or_default();
427                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
428out.push_str("https://");
429#[allow(clippy::needless_borrow)]
430out.push_str(&region.as_ref());
431out.push_str(".signin.c2shome.ic.gov");
432out })
433.build())
434                        },
4358 => {
436                            let region = params.region.as_deref().unwrap_or_default();
437                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
438out.push_str("https://");
439#[allow(clippy::needless_borrow)]
440out.push_str(&region.as_ref());
441out.push_str(".signin.sc2shome.sgov.gov");
442out })
443.build())
444                        },
4459 => {
446                            let region = params.region.as_deref().unwrap_or_default();
447                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
448out.push_str("https://");
449#[allow(clippy::needless_borrow)]
450out.push_str(&region.as_ref());
451out.push_str(".signin.csphome.hci.ic.gov");
452out })
453.build())
454                        },
45510 => {
456                            let region = params.region.as_deref().unwrap_or_default();
457                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
458out.push_str("https://");
459#[allow(clippy::needless_borrow)]
460out.push_str(&region.as_ref());
461out.push_str(".signin.csphome.adc-e.uk");
462out })
463.build())
464                        },
46511 => {
466                            let region = params.region.as_deref().unwrap_or_default();
467                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
468out.push_str("https://");
469#[allow(clippy::needless_borrow)]
470out.push_str(&region.as_ref());
471out.push_str(".signin.amazonaws-eusc.eu");
472out })
473.build())
474                        },
47512 => {
476
477                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url("https://signin-fips.amazonaws-us-gov.com"
478.to_string())
479.build())
480                        },
48113 => {
482                            let region = params.region.as_deref().unwrap_or_default();
483                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
484out.push_str("https://");
485#[allow(clippy::needless_borrow)]
486out.push_str(&region.as_ref());
487out.push_str(".signin-fips.amazonaws-us-gov.com");
488out })
489.build())
490                        },
49114 => {
492                            let region = params.region.as_deref().unwrap_or_default();
493let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
494                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
495out.push_str("https://");
496#[allow(clippy::needless_borrow)]
497out.push_str(&region.as_ref());
498out.push_str(".signin.");
499#[allow(clippy::needless_borrow)]
500out.push_str(&partition_result.dns_suffix());
501out })
502.build())
503                        },
50415 => {
505
506                            ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("Invalid Configuration: FIPS and custom endpoint are not supported"
507.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
508                        },
50916 => {
510
511                            ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("Invalid Configuration: Dualstack and custom endpoint are not supported"
512.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
513                        },
51417 => {
515                            let endpoint = params.endpoint.as_deref().unwrap_or_default();
516                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url(endpoint.to_owned())
517.build())
518                        },
51918 => {
520                            let region = params.region.as_deref().unwrap_or_default();
521let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
522                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
523out.push_str("https://signin-fips.");
524#[allow(clippy::needless_borrow)]
525out.push_str(&region.as_ref());
526out.push_str(".");
527#[allow(clippy::needless_borrow)]
528out.push_str(&partition_result.dual_stack_dns_suffix());
529out })
530.build())
531                        },
53219 => {
533
534                            ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("FIPS and DualStack are enabled, but this partition does not support one or both"
535.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
536                        },
53720 => {
538                            let region = params.region.as_deref().unwrap_or_default();
539let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
540                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
541out.push_str("https://signin-fips.");
542#[allow(clippy::needless_borrow)]
543out.push_str(&region.as_ref());
544out.push_str(".");
545#[allow(clippy::needless_borrow)]
546out.push_str(&partition_result.dns_suffix());
547out })
548.build())
549                        },
55021 => {
551
552                            ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("FIPS is enabled but this partition does not support FIPS"
553.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
554                        },
55522 => {
556                            let region = params.region.as_deref().unwrap_or_default();
557let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
558                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
559out.push_str("https://signin.");
560#[allow(clippy::needless_borrow)]
561out.push_str(&region.as_ref());
562out.push_str(".");
563#[allow(clippy::needless_borrow)]
564out.push_str(&partition_result.dual_stack_dns_suffix());
565out })
566.build())
567                        },
56823 => {
569
570                            ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("DualStack is enabled but this partition does not support DualStack"
571.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
572                        },
57324 => {
574                            let region = params.region.as_deref().unwrap_or_default();
575let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
576                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
577out.push_str("https://signin.");
578#[allow(clippy::needless_borrow)]
579out.push_str(&region.as_ref());
580out.push_str(".");
581#[allow(clippy::needless_borrow)]
582out.push_str(&partition_result.dns_suffix());
583out })
584.build())
585                        },
58625 => {
587
588                            ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("Invalid Configuration: Missing Region"
589.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
590                        },
591                                        _ => ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("No endpoint rule matched")) as ::aws_smithy_runtime_api::box_error::BoxError),
592                                    };
593                                }
594                                1 | -1 => return ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("No endpoint rule matched")) as ::aws_smithy_runtime_api::box_error::BoxError),
595                                ref_val => {
596                                    let is_complement = ref_val < 0;
597                                    let node = &NODES[(ref_val.unsigned_abs() as usize) - 1];
598                                    let condition_result = match node.condition_index {
599                                        0 => region.is_some(),
6001 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
601
602                            let partition_resolver = &self.partition_resolver;
603                            (crate::endpoint_lib::coalesce::coalesce!(is_control_plane.clone()
604,false))
605==
606(true)
607                        })(&mut _diagnostic_collector),
6082 => endpoint.is_some(),
6093 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
610                            let partition_result = &mut context.partition_result;
611                            let partition_resolver = &self.partition_resolver;
612                            {
613    *partition_result = partition_resolver.resolve_partition(if let Some(param) = region{
614                        param
615                    } else {
616                        return false
617                    }, _diagnostic_collector).map(|inner| inner.into());
618    partition_result.is_some()
619}
620                        })(&mut _diagnostic_collector),
6214 => (use_fips) == (&true),
6225 => (use_dual_stack) == (&true),
6236 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
624                            let partition_result = & context.partition_result;
625                            let partition_resolver = &self.partition_resolver;
626                            (if let Some(inner) = partition_result {
627    inner.name()
628}else{
629    return false
630})
631==
632("aws")
633                        })(&mut _diagnostic_collector),
6347 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
635                            let partition_result = & context.partition_result;
636                            let partition_resolver = &self.partition_resolver;
637                            (if let Some(inner) = partition_result {
638    inner.name()
639}else{
640    return false
641})
642==
643("aws-cn")
644                        })(&mut _diagnostic_collector),
6458 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
646                            let partition_result = & context.partition_result;
647                            let partition_resolver = &self.partition_resolver;
648                            (if let Some(inner) = partition_result {
649    inner.supports_dual_stack()
650}else{
651    return false
652})
653==
654(true)
655                        })(&mut _diagnostic_collector),
6569 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
657
658                            let partition_resolver = &self.partition_resolver;
659                            (region)
660==
661&mut Some(
662    ("us-gov-west-1"
663    .to_string().into())
664)
665                        })(&mut _diagnostic_collector),
66610 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
667                            let partition_result = & context.partition_result;
668                            let partition_resolver = &self.partition_resolver;
669                            (if let Some(inner) = partition_result {
670    inner.name()
671}else{
672    return false
673})
674==
675("aws-us-gov")
676                        })(&mut _diagnostic_collector),
67711 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
678                            let partition_result = & context.partition_result;
679                            let partition_resolver = &self.partition_resolver;
680                            (if let Some(inner) = partition_result {
681    inner.supports_fips()
682}else{
683    return false
684})
685==
686(true)
687                        })(&mut _diagnostic_collector),
68812 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
689                            let partition_result = & context.partition_result;
690                            let partition_resolver = &self.partition_resolver;
691                            (if let Some(inner) = partition_result {
692    inner.name()
693}else{
694    return false
695})
696==
697("aws-iso")
698                        })(&mut _diagnostic_collector),
69913 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
700                            let partition_result = & context.partition_result;
701                            let partition_resolver = &self.partition_resolver;
702                            (if let Some(inner) = partition_result {
703    inner.name()
704}else{
705    return false
706})
707==
708("aws-iso-b")
709                        })(&mut _diagnostic_collector),
71014 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
711                            let partition_result = & context.partition_result;
712                            let partition_resolver = &self.partition_resolver;
713                            (if let Some(inner) = partition_result {
714    inner.name()
715}else{
716    return false
717})
718==
719("aws-iso-f")
720                        })(&mut _diagnostic_collector),
72115 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
722                            let partition_result = & context.partition_result;
723                            let partition_resolver = &self.partition_resolver;
724                            (if let Some(inner) = partition_result {
725    inner.name()
726}else{
727    return false
728})
729==
730("aws-iso-e")
731                        })(&mut _diagnostic_collector),
73216 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
733                            let partition_result = & context.partition_result;
734                            let partition_resolver = &self.partition_resolver;
735                            (if let Some(inner) = partition_result {
736    inner.name()
737}else{
738    return false
739})
740==
741("aws-eusc")
742                        })(&mut _diagnostic_collector),
743                                        _ => unreachable!("Invalid condition index"),
744                                    };
745                                    current_ref = if is_complement ^ condition_result { node.high_ref } else { node.low_ref };
746                                }
747                            }
748                        }
749                    }
750                }
751
752                impl crate::config::endpoint::ResolveEndpoint for DefaultResolver {
753                    fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a> {
754                        // Check single-entry cache (lock-free read via ArcSwap)
755                        let cached = self.endpoint_cache.load();
756                        if let Some((cached_params, cached_endpoint)) = cached.as_ref() {
757                            if cached_params == params {
758                                return ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(::std::result::Result::Ok(cached_endpoint.clone()));
759                            }
760                        }
761                        drop(cached);
762                        let result = self.resolve_endpoint(params);
763                        if let ::std::result::Result::Ok(ref endpoint) = result {
764                            self.endpoint_cache.store(::std::sync::Arc::new(Some((params.clone(), endpoint.clone()))));
765                        }
766                        ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(result)
767                    }
768                }
769            const NODES: [crate::endpoint_lib::bdd_interpreter::BddNode; 33] = [
770crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: -1, high_ref: 1, low_ref: -1 },
771crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 0, high_ref: 4, low_ref: 3 },
772crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 2, high_ref: 30, low_ref: 100000025 },
773crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 1, high_ref: 24, low_ref: 5 },
774crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 2, high_ref: 30, low_ref: 6 },
775crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 3, high_ref: 7, low_ref: 26 },
776crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 4, high_ref: 18, low_ref: 8 },
777crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 5, high_ref: 17, low_ref: 9 },
778crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 6, high_ref: 100000004, low_ref: 10 },
779crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 7, high_ref: 100000005, low_ref: 11 },
780crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 10, high_ref: 100000006, low_ref: 12 },
781crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 12, high_ref: 100000007, low_ref: 13 },
782crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 13, high_ref: 100000008, low_ref: 14 },
783crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 14, high_ref: 100000009, low_ref: 15 },
784crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 15, high_ref: 100000010, low_ref: 16 },
785crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 16, high_ref: 100000011, low_ref: 100000014 },
786crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 8, high_ref: 100000022, low_ref: 100000023 },
787crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 5, high_ref: 22, low_ref: 19 },
788crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 9, high_ref: 100000012, low_ref: 20 },
789crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 10, high_ref: 100000013, low_ref: 21 },
790crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 11, high_ref: 100000020, low_ref: 100000021 },
791crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 8, high_ref: 23, low_ref: 100000019 },
792crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 11, high_ref: 100000018, low_ref: 100000019 },
793crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 2, high_ref: 29, low_ref: 25 },
794crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 3, high_ref: 32, low_ref: 26 },
795crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 4, high_ref: 27, low_ref: 100000025 },
796crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 5, high_ref: 100000025, low_ref: 28 },
797crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 9, high_ref: 100000012, low_ref: 100000025 },
798crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 3, high_ref: 32, low_ref: 30 },
799crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 4, high_ref: 100000015, low_ref: 31 },
800crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 5, high_ref: 100000016, low_ref: 100000017 },
801crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 6, high_ref: 100000001, low_ref: 33 },
802crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 7, high_ref: 100000002, low_ref: 100000003 }
803];
804            // These are all optional since they are set by conditions and will
805// all be unset when we start evaluation
806#[derive(Default)]
807#[allow(unused_lifetimes)]
808pub(crate) struct ConditionContext<'a> {
809    pub(crate) partition_result: Option<crate::endpoint_lib::partition::Partition<'a>>,
810    // Sometimes none of the members reference the lifetime, this makes it still valid
811    phantom: std::marker::PhantomData<&'a ()>
812}
813
814#[non_exhaustive]
815#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
816/// Configuration parameters for resolving the correct endpoint
817pub struct Params {
818    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
819    pub(crate) use_dual_stack: bool,
820    /// When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.
821    pub(crate) use_fips: bool,
822    /// Override the endpoint used to send this request
823    pub(crate) endpoint: ::std::option::Option<::std::string::String>,
824    /// The AWS region used to dispatch the request.
825    pub(crate) region: ::std::option::Option<::std::string::String>,
826    /// Indicates if the operation targets the control plane endpoint
827    pub(crate) is_control_plane: ::std::option::Option<bool>,
828}
829impl Params {
830    /// Create a builder for [`Params`]
831                    pub fn builder() -> crate::config::endpoint::ParamsBuilder {
832                        crate::config::endpoint::ParamsBuilder::default()
833                    }
834    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
835    pub fn use_dual_stack(&self) -> ::std::option::Option<bool> {
836                            Some(self.use_dual_stack)
837                        }
838    /// When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.
839    pub fn use_fips(&self) -> ::std::option::Option<bool> {
840                            Some(self.use_fips)
841                        }
842    /// Override the endpoint used to send this request
843    pub fn endpoint(&self) -> ::std::option::Option<&str> {
844                            self.endpoint.as_deref()
845                        }
846    /// The AWS region used to dispatch the request.
847    pub fn region(&self) -> ::std::option::Option<&str> {
848                            self.region.as_deref()
849                        }
850    /// Indicates if the operation targets the control plane endpoint
851    pub fn is_control_plane(&self) -> ::std::option::Option<bool> {
852                            self.is_control_plane
853                        }
854}
855
856/// Builder for [`Params`]
857#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
858pub struct ParamsBuilder {
859    use_dual_stack: ::std::option::Option<bool>,
860    use_fips: ::std::option::Option<bool>,
861    endpoint: ::std::option::Option<::std::string::String>,
862    region: ::std::option::Option<::std::string::String>,
863    is_control_plane: ::std::option::Option<bool>,
864}
865impl ParamsBuilder {
866    /// Consume this builder, creating [`Params`].
867    pub fn build(self) -> ::std::result::Result<crate::config::endpoint::Params, crate::config::endpoint::InvalidParams> {
868        if let Some(region) = &self.region {
869                                                if !crate::endpoint_lib::host::is_valid_host_label(region.as_ref() as &str, true, &mut crate::endpoint_lib::diagnostic::DiagnosticCollector::new()) {
870                                                    return Err(crate::config::endpoint::InvalidParams::invalid_value("region", "must be a valid host label"))
871                                                }
872                                            };
873        Ok(#[allow(clippy::unnecessary_lazy_evaluations)]
874        crate::config::endpoint::Params {
875            use_dual_stack: self.use_dual_stack
876            .or_else(||Some(false))
877            .ok_or_else(||crate::config::endpoint::InvalidParams::missing("use_dual_stack"))?
878            ,
879            use_fips: self.use_fips
880            .or_else(||Some(false))
881            .ok_or_else(||crate::config::endpoint::InvalidParams::missing("use_fips"))?
882            ,
883            endpoint: self.endpoint
884            ,
885            region: self.region
886            ,
887            is_control_plane: self.is_control_plane
888            ,
889        })
890    }
891    /// Sets the value for use_dual_stack
892    ///
893    /// When unset, this parameter has a default value of `false`.
894    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
895                        pub fn use_dual_stack(mut self, value: impl Into<bool>) -> Self {
896                            self.use_dual_stack = Some(value.into());
897                            self
898                        }
899
900                        /// Sets the value for use_dual_stack
901    ///
902    /// When unset, this parameter has a default value of `false`.
903    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
904                        pub fn set_use_dual_stack(mut self, param: Option<bool>) -> Self {
905                            self.use_dual_stack = param;
906                            self
907                        }
908    /// Sets the value for use_fips
909    ///
910    /// When unset, this parameter has a default value of `false`.
911    /// When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.
912                        pub fn use_fips(mut self, value: impl Into<bool>) -> Self {
913                            self.use_fips = Some(value.into());
914                            self
915                        }
916
917                        /// Sets the value for use_fips
918    ///
919    /// When unset, this parameter has a default value of `false`.
920    /// When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.
921                        pub fn set_use_fips(mut self, param: Option<bool>) -> Self {
922                            self.use_fips = param;
923                            self
924                        }
925    /// Sets the value for endpoint
926    ///
927    /// Override the endpoint used to send this request
928                        pub fn endpoint(mut self, value: impl Into<::std::string::String>) -> Self {
929                            self.endpoint = Some(value.into());
930                            self
931                        }
932
933                        /// Sets the value for endpoint
934    ///
935    /// Override the endpoint used to send this request
936                        pub fn set_endpoint(mut self, param: Option<::std::string::String>) -> Self {
937                            self.endpoint = param;
938                            self
939                        }
940    /// Sets the value for region
941    ///
942    /// The AWS region used to dispatch the request.
943                        pub fn region(mut self, value: impl Into<::std::string::String>) -> Self {
944                            self.region = Some(value.into());
945                            self
946                        }
947
948                        /// Sets the value for region
949    ///
950    /// The AWS region used to dispatch the request.
951                        pub fn set_region(mut self, param: Option<::std::string::String>) -> Self {
952                            self.region = param;
953                            self
954                        }
955    /// Sets the value for is_control_plane
956    ///
957    /// Indicates if the operation targets the control plane endpoint
958                        pub fn is_control_plane(mut self, value: impl Into<bool>) -> Self {
959                            self.is_control_plane = Some(value.into());
960                            self
961                        }
962
963                        /// Sets the value for is_control_plane
964    ///
965    /// Indicates if the operation targets the control plane endpoint
966                        pub fn set_is_control_plane(mut self, param: Option<bool>) -> Self {
967                            self.is_control_plane = param;
968                            self
969                        }
970}
971
972/// An error that occurred during endpoint resolution
973                    #[derive(Debug)]
974                    pub struct InvalidParams {
975                        field: std::borrow::Cow<'static, str>,
976                        kind: InvalidParamsErrorKind,
977                    }
978
979                    /// The kind of invalid parameter error
980                    #[derive(Debug)]
981                    enum InvalidParamsErrorKind {
982                        MissingField,
983                        InvalidValue {
984                            message: &'static str,
985                        }
986                    }
987
988                    impl InvalidParams {
989                        #[allow(dead_code)]
990                        fn missing(field: &'static str) -> Self {
991                            Self { field: field.into(), kind: InvalidParamsErrorKind::MissingField }
992                        }
993
994                        #[allow(dead_code)]
995                        fn invalid_value(field: &'static str, message: &'static str) -> Self {
996                            Self { field: field.into(), kind: InvalidParamsErrorKind::InvalidValue { message }}
997                        }
998                    }
999
1000                    impl std::fmt::Display for InvalidParams {
1001                        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1002                            match self.kind {
1003                                InvalidParamsErrorKind::MissingField => write!(f, "a required field was missing: `{}`", self.field),
1004                                InvalidParamsErrorKind::InvalidValue { message} => write!(f, "invalid value for field: `{}` - {}", self.field, message),
1005                            }
1006                        }
1007                    }
1008
1009                    impl std::error::Error for InvalidParams { }
1010