Skip to main content

aws_sdk_sagemakerruntimehttp2/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::EndpointFuture;
3pub use ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver;
4pub use ::aws_smithy_types::endpoint::Endpoint;
5
6/// Interceptor that tracks endpoint override business metric.
7#[derive(Debug, Default)]
8pub(crate) struct EndpointOverrideFeatureTrackerInterceptor;
9
10#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
11impl ::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    /// For custom endpoint with region not set and fips disabled
33    #[test]
34    fn test_1() {
35        let params = crate::config::endpoint::Params::builder()
36            .endpoint("https://example.com".to_string())
37            .use_fips(false)
38            .build()
39            .expect("invalid params");
40        let resolver = crate::config::endpoint::DefaultResolver::new();
41        let endpoint = resolver.resolve_endpoint(&params);
42        let endpoint = endpoint.expect("Expected valid endpoint: https://example.com");
43        assert_eq!(
44            endpoint,
45            ::aws_smithy_types::endpoint::Endpoint::builder().url("https://example.com").build()
46        );
47    }
48
49    /// For custom endpoint with fips enabled
50    #[test]
51    fn test_2() {
52        let params = crate::config::endpoint::Params::builder()
53            .endpoint("https://example.com".to_string())
54            .use_fips(true)
55            .build()
56            .expect("invalid params");
57        let resolver = crate::config::endpoint::DefaultResolver::new();
58        let endpoint = resolver.resolve_endpoint(&params);
59        let error = endpoint
60            .expect_err("expected error: Invalid Configuration: FIPS and custom endpoint are not supported [For custom endpoint with fips enabled]");
61        assert_eq!(format!("{}", error), "Invalid Configuration: FIPS and custom endpoint are not supported")
62    }
63
64    /// For custom endpoint with fips disabled and dualstack enabled
65    #[test]
66    fn test_3() {
67        let params = crate::config::endpoint::Params::builder()
68            .endpoint("https://example.com".to_string())
69            .use_fips(false)
70            .use_dual_stack(true)
71            .build()
72            .expect("invalid params");
73        let resolver = crate::config::endpoint::DefaultResolver::new();
74        let endpoint = resolver.resolve_endpoint(&params);
75        let error = endpoint.expect_err("expected error: Invalid Configuration: Dualstack and custom endpoint are not supported [For custom endpoint with fips disabled and dualstack enabled]");
76        assert_eq!(
77            format!("{}", error),
78            "Invalid Configuration: Dualstack and custom endpoint are not supported"
79        )
80    }
81
82    /// For region us-east-1 with FIPS enabled and DualStack enabled
83    #[test]
84    fn test_4() {
85        let params = crate::config::endpoint::Params::builder()
86            .region("us-east-1".to_string())
87            .use_fips(true)
88            .use_dual_stack(true)
89            .build()
90            .expect("invalid params");
91        let resolver = crate::config::endpoint::DefaultResolver::new();
92        let endpoint = resolver.resolve_endpoint(&params);
93        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime-fips.sagemaker.us-east-1.api.aws:8443");
94        assert_eq!(
95            endpoint,
96            ::aws_smithy_types::endpoint::Endpoint::builder()
97                .url("https://runtime-fips.sagemaker.us-east-1.api.aws:8443")
98                .build()
99        );
100    }
101
102    /// For region us-east-1 with FIPS enabled and DualStack disabled
103    #[test]
104    fn test_5() {
105        let params = crate::config::endpoint::Params::builder()
106            .region("us-east-1".to_string())
107            .use_fips(true)
108            .use_dual_stack(false)
109            .build()
110            .expect("invalid params");
111        let resolver = crate::config::endpoint::DefaultResolver::new();
112        let endpoint = resolver.resolve_endpoint(&params);
113        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime-fips.sagemaker.us-east-1.amazonaws.com:8443");
114        assert_eq!(
115            endpoint,
116            ::aws_smithy_types::endpoint::Endpoint::builder()
117                .url("https://runtime-fips.sagemaker.us-east-1.amazonaws.com:8443")
118                .build()
119        );
120    }
121
122    /// For region us-east-1 with FIPS disabled and DualStack enabled
123    #[test]
124    fn test_6() {
125        let params = crate::config::endpoint::Params::builder()
126            .region("us-east-1".to_string())
127            .use_fips(false)
128            .use_dual_stack(true)
129            .build()
130            .expect("invalid params");
131        let resolver = crate::config::endpoint::DefaultResolver::new();
132        let endpoint = resolver.resolve_endpoint(&params);
133        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime.sagemaker.us-east-1.api.aws:8443");
134        assert_eq!(
135            endpoint,
136            ::aws_smithy_types::endpoint::Endpoint::builder()
137                .url("https://runtime.sagemaker.us-east-1.api.aws:8443")
138                .build()
139        );
140    }
141
142    /// For region us-east-1 with FIPS disabled and DualStack disabled
143    #[test]
144    fn test_7() {
145        let params = crate::config::endpoint::Params::builder()
146            .region("us-east-1".to_string())
147            .use_fips(false)
148            .use_dual_stack(false)
149            .build()
150            .expect("invalid params");
151        let resolver = crate::config::endpoint::DefaultResolver::new();
152        let endpoint = resolver.resolve_endpoint(&params);
153        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime.sagemaker.us-east-1.amazonaws.com:8443");
154        assert_eq!(
155            endpoint,
156            ::aws_smithy_types::endpoint::Endpoint::builder()
157                .url("https://runtime.sagemaker.us-east-1.amazonaws.com:8443")
158                .build()
159        );
160    }
161
162    /// For region cn-northwest-1 with FIPS enabled and DualStack enabled
163    #[test]
164    fn test_8() {
165        let params = crate::config::endpoint::Params::builder()
166            .region("cn-northwest-1".to_string())
167            .use_fips(true)
168            .use_dual_stack(true)
169            .build()
170            .expect("invalid params");
171        let resolver = crate::config::endpoint::DefaultResolver::new();
172        let endpoint = resolver.resolve_endpoint(&params);
173        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime-fips.sagemaker.cn-northwest-1.api.amazonwebservices.com.cn:8443");
174        assert_eq!(
175            endpoint,
176            ::aws_smithy_types::endpoint::Endpoint::builder()
177                .url("https://runtime-fips.sagemaker.cn-northwest-1.api.amazonwebservices.com.cn:8443")
178                .build()
179        );
180    }
181
182    /// For region cn-northwest-1 with FIPS enabled and DualStack disabled
183    #[test]
184    fn test_9() {
185        let params = crate::config::endpoint::Params::builder()
186            .region("cn-northwest-1".to_string())
187            .use_fips(true)
188            .use_dual_stack(false)
189            .build()
190            .expect("invalid params");
191        let resolver = crate::config::endpoint::DefaultResolver::new();
192        let endpoint = resolver.resolve_endpoint(&params);
193        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime-fips.sagemaker.cn-northwest-1.amazonaws.com.cn:8443");
194        assert_eq!(
195            endpoint,
196            ::aws_smithy_types::endpoint::Endpoint::builder()
197                .url("https://runtime-fips.sagemaker.cn-northwest-1.amazonaws.com.cn:8443")
198                .build()
199        );
200    }
201
202    /// For region cn-northwest-1 with FIPS disabled and DualStack enabled
203    #[test]
204    fn test_10() {
205        let params = crate::config::endpoint::Params::builder()
206            .region("cn-northwest-1".to_string())
207            .use_fips(false)
208            .use_dual_stack(true)
209            .build()
210            .expect("invalid params");
211        let resolver = crate::config::endpoint::DefaultResolver::new();
212        let endpoint = resolver.resolve_endpoint(&params);
213        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime.sagemaker.cn-northwest-1.api.amazonwebservices.com.cn:8443");
214        assert_eq!(
215            endpoint,
216            ::aws_smithy_types::endpoint::Endpoint::builder()
217                .url("https://runtime.sagemaker.cn-northwest-1.api.amazonwebservices.com.cn:8443")
218                .build()
219        );
220    }
221
222    /// For region cn-northwest-1 with FIPS disabled and DualStack disabled
223    #[test]
224    fn test_11() {
225        let params = crate::config::endpoint::Params::builder()
226            .region("cn-northwest-1".to_string())
227            .use_fips(false)
228            .use_dual_stack(false)
229            .build()
230            .expect("invalid params");
231        let resolver = crate::config::endpoint::DefaultResolver::new();
232        let endpoint = resolver.resolve_endpoint(&params);
233        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime.sagemaker.cn-northwest-1.amazonaws.com.cn:8443");
234        assert_eq!(
235            endpoint,
236            ::aws_smithy_types::endpoint::Endpoint::builder()
237                .url("https://runtime.sagemaker.cn-northwest-1.amazonaws.com.cn:8443")
238                .build()
239        );
240    }
241
242    /// For region eusc-de-east-1 with FIPS enabled and DualStack disabled
243    #[test]
244    fn test_12() {
245        let params = crate::config::endpoint::Params::builder()
246            .region("eusc-de-east-1".to_string())
247            .use_fips(true)
248            .use_dual_stack(false)
249            .build()
250            .expect("invalid params");
251        let resolver = crate::config::endpoint::DefaultResolver::new();
252        let endpoint = resolver.resolve_endpoint(&params);
253        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime-fips.sagemaker.eusc-de-east-1.amazonaws.eu:8443");
254        assert_eq!(
255            endpoint,
256            ::aws_smithy_types::endpoint::Endpoint::builder()
257                .url("https://runtime-fips.sagemaker.eusc-de-east-1.amazonaws.eu:8443")
258                .build()
259        );
260    }
261
262    /// For region eusc-de-east-1 with FIPS disabled and DualStack disabled
263    #[test]
264    fn test_13() {
265        let params = crate::config::endpoint::Params::builder()
266            .region("eusc-de-east-1".to_string())
267            .use_fips(false)
268            .use_dual_stack(false)
269            .build()
270            .expect("invalid params");
271        let resolver = crate::config::endpoint::DefaultResolver::new();
272        let endpoint = resolver.resolve_endpoint(&params);
273        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime.sagemaker.eusc-de-east-1.amazonaws.eu:8443");
274        assert_eq!(
275            endpoint,
276            ::aws_smithy_types::endpoint::Endpoint::builder()
277                .url("https://runtime.sagemaker.eusc-de-east-1.amazonaws.eu:8443")
278                .build()
279        );
280    }
281
282    /// For region us-iso-east-1 with FIPS enabled and DualStack disabled
283    #[test]
284    fn test_14() {
285        let params = crate::config::endpoint::Params::builder()
286            .region("us-iso-east-1".to_string())
287            .use_fips(true)
288            .use_dual_stack(false)
289            .build()
290            .expect("invalid params");
291        let resolver = crate::config::endpoint::DefaultResolver::new();
292        let endpoint = resolver.resolve_endpoint(&params);
293        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime-fips.sagemaker.us-iso-east-1.c2s.ic.gov:8443");
294        assert_eq!(
295            endpoint,
296            ::aws_smithy_types::endpoint::Endpoint::builder()
297                .url("https://runtime-fips.sagemaker.us-iso-east-1.c2s.ic.gov:8443")
298                .build()
299        );
300    }
301
302    /// For region us-iso-east-1 with FIPS disabled and DualStack disabled
303    #[test]
304    fn test_15() {
305        let params = crate::config::endpoint::Params::builder()
306            .region("us-iso-east-1".to_string())
307            .use_fips(false)
308            .use_dual_stack(false)
309            .build()
310            .expect("invalid params");
311        let resolver = crate::config::endpoint::DefaultResolver::new();
312        let endpoint = resolver.resolve_endpoint(&params);
313        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime.sagemaker.us-iso-east-1.c2s.ic.gov:8443");
314        assert_eq!(
315            endpoint,
316            ::aws_smithy_types::endpoint::Endpoint::builder()
317                .url("https://runtime.sagemaker.us-iso-east-1.c2s.ic.gov:8443")
318                .build()
319        );
320    }
321
322    /// For region us-isob-east-1 with FIPS enabled and DualStack disabled
323    #[test]
324    fn test_16() {
325        let params = crate::config::endpoint::Params::builder()
326            .region("us-isob-east-1".to_string())
327            .use_fips(true)
328            .use_dual_stack(false)
329            .build()
330            .expect("invalid params");
331        let resolver = crate::config::endpoint::DefaultResolver::new();
332        let endpoint = resolver.resolve_endpoint(&params);
333        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime-fips.sagemaker.us-isob-east-1.sc2s.sgov.gov:8443");
334        assert_eq!(
335            endpoint,
336            ::aws_smithy_types::endpoint::Endpoint::builder()
337                .url("https://runtime-fips.sagemaker.us-isob-east-1.sc2s.sgov.gov:8443")
338                .build()
339        );
340    }
341
342    /// For region us-isob-east-1 with FIPS disabled and DualStack disabled
343    #[test]
344    fn test_17() {
345        let params = crate::config::endpoint::Params::builder()
346            .region("us-isob-east-1".to_string())
347            .use_fips(false)
348            .use_dual_stack(false)
349            .build()
350            .expect("invalid params");
351        let resolver = crate::config::endpoint::DefaultResolver::new();
352        let endpoint = resolver.resolve_endpoint(&params);
353        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime.sagemaker.us-isob-east-1.sc2s.sgov.gov:8443");
354        assert_eq!(
355            endpoint,
356            ::aws_smithy_types::endpoint::Endpoint::builder()
357                .url("https://runtime.sagemaker.us-isob-east-1.sc2s.sgov.gov:8443")
358                .build()
359        );
360    }
361
362    /// For region eu-isoe-west-1 with FIPS enabled and DualStack disabled
363    #[test]
364    fn test_18() {
365        let params = crate::config::endpoint::Params::builder()
366            .region("eu-isoe-west-1".to_string())
367            .use_fips(true)
368            .use_dual_stack(false)
369            .build()
370            .expect("invalid params");
371        let resolver = crate::config::endpoint::DefaultResolver::new();
372        let endpoint = resolver.resolve_endpoint(&params);
373        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime.sagemaker-fips.eu-isoe-west-1.cloud.adc-e.uk");
374        assert_eq!(
375            endpoint,
376            ::aws_smithy_types::endpoint::Endpoint::builder()
377                .url("https://runtime.sagemaker-fips.eu-isoe-west-1.cloud.adc-e.uk")
378                .build()
379        );
380    }
381
382    /// For region eu-isoe-west-1 with FIPS disabled and DualStack disabled
383    #[test]
384    fn test_19() {
385        let params = crate::config::endpoint::Params::builder()
386            .region("eu-isoe-west-1".to_string())
387            .use_fips(false)
388            .use_dual_stack(false)
389            .build()
390            .expect("invalid params");
391        let resolver = crate::config::endpoint::DefaultResolver::new();
392        let endpoint = resolver.resolve_endpoint(&params);
393        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime.sagemaker.eu-isoe-west-1.cloud.adc-e.uk");
394        assert_eq!(
395            endpoint,
396            ::aws_smithy_types::endpoint::Endpoint::builder()
397                .url("https://runtime.sagemaker.eu-isoe-west-1.cloud.adc-e.uk")
398                .build()
399        );
400    }
401
402    /// For region us-isof-south-1 with FIPS enabled and DualStack disabled
403    #[test]
404    fn test_20() {
405        let params = crate::config::endpoint::Params::builder()
406            .region("us-isof-south-1".to_string())
407            .use_fips(true)
408            .use_dual_stack(false)
409            .build()
410            .expect("invalid params");
411        let resolver = crate::config::endpoint::DefaultResolver::new();
412        let endpoint = resolver.resolve_endpoint(&params);
413        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime-fips.sagemaker.us-isof-south-1.csp.hci.ic.gov:8443");
414        assert_eq!(
415            endpoint,
416            ::aws_smithy_types::endpoint::Endpoint::builder()
417                .url("https://runtime-fips.sagemaker.us-isof-south-1.csp.hci.ic.gov:8443")
418                .build()
419        );
420    }
421
422    /// For region us-isof-south-1 with FIPS disabled and DualStack disabled
423    #[test]
424    fn test_21() {
425        let params = crate::config::endpoint::Params::builder()
426            .region("us-isof-south-1".to_string())
427            .use_fips(false)
428            .use_dual_stack(false)
429            .build()
430            .expect("invalid params");
431        let resolver = crate::config::endpoint::DefaultResolver::new();
432        let endpoint = resolver.resolve_endpoint(&params);
433        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime.sagemaker.us-isof-south-1.csp.hci.ic.gov:8443");
434        assert_eq!(
435            endpoint,
436            ::aws_smithy_types::endpoint::Endpoint::builder()
437                .url("https://runtime.sagemaker.us-isof-south-1.csp.hci.ic.gov:8443")
438                .build()
439        );
440    }
441
442    /// For region us-gov-west-1 with FIPS enabled and DualStack enabled
443    #[test]
444    fn test_22() {
445        let params = crate::config::endpoint::Params::builder()
446            .region("us-gov-west-1".to_string())
447            .use_fips(true)
448            .use_dual_stack(true)
449            .build()
450            .expect("invalid params");
451        let resolver = crate::config::endpoint::DefaultResolver::new();
452        let endpoint = resolver.resolve_endpoint(&params);
453        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime-fips.sagemaker.us-gov-west-1.api.aws:8443");
454        assert_eq!(
455            endpoint,
456            ::aws_smithy_types::endpoint::Endpoint::builder()
457                .url("https://runtime-fips.sagemaker.us-gov-west-1.api.aws:8443")
458                .build()
459        );
460    }
461
462    /// For region us-gov-west-1 with FIPS enabled and DualStack disabled
463    #[test]
464    fn test_23() {
465        let params = crate::config::endpoint::Params::builder()
466            .region("us-gov-west-1".to_string())
467            .use_fips(true)
468            .use_dual_stack(false)
469            .build()
470            .expect("invalid params");
471        let resolver = crate::config::endpoint::DefaultResolver::new();
472        let endpoint = resolver.resolve_endpoint(&params);
473        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime-fips.sagemaker.us-gov-west-1.amazonaws.com:8443");
474        assert_eq!(
475            endpoint,
476            ::aws_smithy_types::endpoint::Endpoint::builder()
477                .url("https://runtime-fips.sagemaker.us-gov-west-1.amazonaws.com:8443")
478                .build()
479        );
480    }
481
482    /// For region us-gov-west-1 with FIPS disabled and DualStack enabled
483    #[test]
484    fn test_24() {
485        let params = crate::config::endpoint::Params::builder()
486            .region("us-gov-west-1".to_string())
487            .use_fips(false)
488            .use_dual_stack(true)
489            .build()
490            .expect("invalid params");
491        let resolver = crate::config::endpoint::DefaultResolver::new();
492        let endpoint = resolver.resolve_endpoint(&params);
493        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime.sagemaker.us-gov-west-1.api.aws:8443");
494        assert_eq!(
495            endpoint,
496            ::aws_smithy_types::endpoint::Endpoint::builder()
497                .url("https://runtime.sagemaker.us-gov-west-1.api.aws:8443")
498                .build()
499        );
500    }
501
502    /// For region us-gov-west-1 with FIPS disabled and DualStack disabled
503    #[test]
504    fn test_25() {
505        let params = crate::config::endpoint::Params::builder()
506            .region("us-gov-west-1".to_string())
507            .use_fips(false)
508            .use_dual_stack(false)
509            .build()
510            .expect("invalid params");
511        let resolver = crate::config::endpoint::DefaultResolver::new();
512        let endpoint = resolver.resolve_endpoint(&params);
513        let endpoint = endpoint.expect("Expected valid endpoint: https://runtime.sagemaker.us-gov-west-1.amazonaws.com:8443");
514        assert_eq!(
515            endpoint,
516            ::aws_smithy_types::endpoint::Endpoint::builder()
517                .url("https://runtime.sagemaker.us-gov-west-1.amazonaws.com:8443")
518                .build()
519        );
520    }
521
522    /// Missing region
523    #[test]
524    fn test_26() {
525        let params = crate::config::endpoint::Params::builder().build().expect("invalid params");
526        let resolver = crate::config::endpoint::DefaultResolver::new();
527        let endpoint = resolver.resolve_endpoint(&params);
528        let error = endpoint.expect_err("expected error: Invalid Configuration: Missing Region [Missing region]");
529        assert_eq!(format!("{}", error), "Invalid Configuration: Missing Region")
530    }
531}
532
533/// Endpoint resolver trait specific to Amazon SageMaker Runtime HTTP2
534pub trait ResolveEndpoint: ::std::marker::Send + ::std::marker::Sync + ::std::fmt::Debug {
535    /// Resolve an endpoint with the given parameters
536    fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a>;
537
538    /// Convert this service-specific resolver into a `SharedEndpointResolver`
539    ///
540    /// The resulting resolver will downcast `EndpointResolverParams` into `crate::config::endpoint::Params`.
541    fn into_shared_resolver(self) -> ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver
542    where
543        Self: Sized + 'static,
544    {
545        ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver::new(DowncastParams(self))
546    }
547}
548
549#[derive(Debug)]
550struct DowncastParams<T>(T);
551impl<T> ::aws_smithy_runtime_api::client::endpoint::ResolveEndpoint for DowncastParams<T>
552where
553    T: ResolveEndpoint,
554{
555    fn resolve_endpoint<'a>(
556        &'a self,
557        params: &'a ::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams,
558    ) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a> {
559        let ep = match params.get::<crate::config::endpoint::Params>() {
560            Some(params) => self.0.resolve_endpoint(params),
561            None => ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(Err("params of expected type was not present".into())),
562        };
563        ep
564    }
565}
566
567#[derive(Debug)]
568/// The default endpoint resolver.
569pub struct DefaultResolver {
570    partition_resolver: &'static crate::endpoint_lib::partition::PartitionResolver,
571    endpoint_cache: ::arc_swap::ArcSwap<::std::option::Option<(Params, ::aws_smithy_types::endpoint::Endpoint)>>,
572}
573
574impl Default for DefaultResolver {
575    fn default() -> Self {
576        Self::new()
577    }
578}
579
580impl DefaultResolver {
581    /// Create a new DefaultResolver
582    pub fn new() -> Self {
583        Self {
584            partition_resolver: &crate::endpoint_lib::DEFAULT_PARTITION_RESOLVER,
585            endpoint_cache: ::arc_swap::ArcSwap::from_pointee(None),
586        }
587    }
588
589    #[allow(
590        unused_variables,
591        unused_parens,
592        clippy::double_parens,
593        clippy::useless_conversion,
594        clippy::bool_comparison,
595        clippy::comparison_to_empty,
596        clippy::needless_borrow,
597        clippy::useless_asref,
598        clippy::redundant_closure_call,
599        clippy::clone_on_copy
600    )]
601    fn resolve_endpoint<'a>(
602        &'a self,
603        params: &'a crate::config::endpoint::Params,
604    ) -> ::std::result::Result<::aws_smithy_types::endpoint::Endpoint, ::aws_smithy_runtime_api::box_error::BoxError> {
605        let mut _diagnostic_collector = crate::endpoint_lib::diagnostic::DiagnosticCollector::new();
606        #[allow(unused_mut)]
607        let mut context = ConditionContext::default();
608
609        // Param bindings
610        let use_dual_stack = &params.use_dual_stack;
611        let use_fips = &params.use_fips;
612        let endpoint = &params.endpoint;
613        let region = &params.region;
614
615        let mut current_ref: i32 = 2;
616        loop {
617            match current_ref {
618                ref_val if ref_val >= 100_000_000 => {
619                    return match (ref_val - 100_000_000) as usize {
620                        0 => ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message(
621                            "No endpoint rule matched",
622                        )) as ::aws_smithy_runtime_api::box_error::BoxError),
623                        1 => ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message(
624                            "Invalid Configuration: FIPS and custom endpoint are not supported".to_string(),
625                        )) as ::aws_smithy_runtime_api::box_error::BoxError),
626                        2 => ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message(
627                            "Invalid Configuration: Dualstack and custom endpoint are not supported".to_string(),
628                        )) as ::aws_smithy_runtime_api::box_error::BoxError),
629                        3 => {
630                            let endpoint = params.endpoint.as_deref().unwrap_or_default();
631                            ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url(endpoint.to_owned()).build())
632                        }
633                        4 => {
634                            let region = params.region.as_deref().unwrap_or_default();
635                            let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
636                            ::std::result::Result::Ok(
637                                ::aws_smithy_types::endpoint::Endpoint::builder()
638                                    .url({
639                                        let mut out = String::new();
640                                        out.push_str("https://runtime.sagemaker.");
641                                        #[allow(clippy::needless_borrow)]
642                                        out.push_str(&region.as_ref());
643                                        out.push('.');
644                                        #[allow(clippy::needless_borrow)]
645                                        out.push_str(&partition_result.dns_suffix());
646                                        out.push_str(":8443");
647                                        out
648                                    })
649                                    .build(),
650                            )
651                        }
652                        5 => {
653                            let region = params.region.as_deref().unwrap_or_default();
654                            let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
655                            ::std::result::Result::Ok(
656                                ::aws_smithy_types::endpoint::Endpoint::builder()
657                                    .url({
658                                        let mut out = String::new();
659                                        out.push_str("https://runtime.sagemaker.");
660                                        #[allow(clippy::needless_borrow)]
661                                        out.push_str(&region.as_ref());
662                                        out.push('.');
663                                        #[allow(clippy::needless_borrow)]
664                                        out.push_str(&partition_result.dual_stack_dns_suffix());
665                                        out.push_str(":8443");
666                                        out
667                                    })
668                                    .build(),
669                            )
670                        }
671                        6 => {
672                            let region = params.region.as_deref().unwrap_or_default();
673                            let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
674                            ::std::result::Result::Ok(
675                                ::aws_smithy_types::endpoint::Endpoint::builder()
676                                    .url({
677                                        let mut out = String::new();
678                                        out.push_str("https://runtime-fips.sagemaker.");
679                                        #[allow(clippy::needless_borrow)]
680                                        out.push_str(&region.as_ref());
681                                        out.push('.');
682                                        #[allow(clippy::needless_borrow)]
683                                        out.push_str(&partition_result.dns_suffix());
684                                        out.push_str(":8443");
685                                        out
686                                    })
687                                    .build(),
688                            )
689                        }
690                        7 => {
691                            let region = params.region.as_deref().unwrap_or_default();
692                            let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
693                            ::std::result::Result::Ok(
694                                ::aws_smithy_types::endpoint::Endpoint::builder()
695                                    .url({
696                                        let mut out = String::new();
697                                        out.push_str("https://runtime-fips.sagemaker.");
698                                        #[allow(clippy::needless_borrow)]
699                                        out.push_str(&region.as_ref());
700                                        out.push('.');
701                                        #[allow(clippy::needless_borrow)]
702                                        out.push_str(&partition_result.dual_stack_dns_suffix());
703                                        out.push_str(":8443");
704                                        out
705                                    })
706                                    .build(),
707                            )
708                        }
709                        8 => {
710                            let region = params.region.as_deref().unwrap_or_default();
711                            let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
712                            ::std::result::Result::Ok(
713                                ::aws_smithy_types::endpoint::Endpoint::builder()
714                                    .url({
715                                        let mut out = String::new();
716                                        out.push_str("https://runtime.sagemaker-fips.");
717                                        #[allow(clippy::needless_borrow)]
718                                        out.push_str(&region.as_ref());
719                                        out.push('.');
720                                        #[allow(clippy::needless_borrow)]
721                                        out.push_str(&partition_result.dual_stack_dns_suffix());
722                                        out
723                                    })
724                                    .build(),
725                            )
726                        }
727                        9 => ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message(
728                            "FIPS and DualStack are enabled, but this partition does not support one or both".to_string(),
729                        )) as ::aws_smithy_runtime_api::box_error::BoxError),
730                        10 => {
731                            let region = params.region.as_deref().unwrap_or_default();
732                            let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
733                            ::std::result::Result::Ok(
734                                ::aws_smithy_types::endpoint::Endpoint::builder()
735                                    .url({
736                                        let mut out = String::new();
737                                        out.push_str("https://runtime.sagemaker-fips.");
738                                        #[allow(clippy::needless_borrow)]
739                                        out.push_str(&region.as_ref());
740                                        out.push('.');
741                                        #[allow(clippy::needless_borrow)]
742                                        out.push_str(&partition_result.dns_suffix());
743                                        out
744                                    })
745                                    .build(),
746                            )
747                        }
748                        11 => ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message(
749                            "FIPS is enabled but this partition does not support FIPS".to_string(),
750                        )) as ::aws_smithy_runtime_api::box_error::BoxError),
751                        12 => {
752                            let region = params.region.as_deref().unwrap_or_default();
753                            let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
754                            ::std::result::Result::Ok(
755                                ::aws_smithy_types::endpoint::Endpoint::builder()
756                                    .url({
757                                        let mut out = String::new();
758                                        out.push_str("https://runtime.sagemaker.");
759                                        #[allow(clippy::needless_borrow)]
760                                        out.push_str(&region.as_ref());
761                                        out.push('.');
762                                        #[allow(clippy::needless_borrow)]
763                                        out.push_str(&partition_result.dual_stack_dns_suffix());
764                                        out
765                                    })
766                                    .build(),
767                            )
768                        }
769                        13 => ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message(
770                            "DualStack is enabled but this partition does not support DualStack".to_string(),
771                        )) as ::aws_smithy_runtime_api::box_error::BoxError),
772                        14 => {
773                            let region = params.region.as_deref().unwrap_or_default();
774                            let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
775                            ::std::result::Result::Ok(
776                                ::aws_smithy_types::endpoint::Endpoint::builder()
777                                    .url({
778                                        let mut out = String::new();
779                                        out.push_str("https://runtime.sagemaker.");
780                                        #[allow(clippy::needless_borrow)]
781                                        out.push_str(&region.as_ref());
782                                        out.push('.');
783                                        #[allow(clippy::needless_borrow)]
784                                        out.push_str(&partition_result.dns_suffix());
785                                        out
786                                    })
787                                    .build(),
788                            )
789                        }
790                        15 => ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message(
791                            "Invalid Configuration: Missing Region".to_string(),
792                        )) as ::aws_smithy_runtime_api::box_error::BoxError),
793                        _ => ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message(
794                            "No endpoint rule matched",
795                        )) as ::aws_smithy_runtime_api::box_error::BoxError),
796                    };
797                }
798                1 | -1 => {
799                    return ::std::result::Result::Err(
800                        Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("No endpoint rule matched"))
801                            as ::aws_smithy_runtime_api::box_error::BoxError,
802                    )
803                }
804                ref_val => {
805                    let is_complement = ref_val < 0;
806                    let node = &NODES[(ref_val.unsigned_abs() as usize) - 1];
807                    let condition_result = match node.condition_index {
808                        0 => endpoint.is_some(),
809                        1 => region.is_some(),
810                        2 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
811                            let partition_result = &mut context.partition_result;
812                            let partition_resolver = &self.partition_resolver;
813                            {
814                                *partition_result = partition_resolver
815                                    .resolve_partition(if let Some(param) = region { param } else { return false }, _diagnostic_collector)
816                                    .map(|inner| inner.into());
817                                partition_result.is_some()
818                            }
819                        })(&mut _diagnostic_collector),
820                        3 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
821                            let partition_result = &context.partition_result;
822                            let partition_resolver = &self.partition_resolver;
823                            (if let Some(inner) = partition_result {
824                                inner.name()
825                            } else {
826                                return false;
827                            }) == ("aws")
828                        })(&mut _diagnostic_collector),
829                        4 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
830                            let partition_result = &context.partition_result;
831                            let partition_resolver = &self.partition_resolver;
832                            (if let Some(inner) = partition_result {
833                                inner.name()
834                            } else {
835                                return false;
836                            }) == ("aws-cn")
837                        })(&mut _diagnostic_collector),
838                        5 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
839                            let partition_result = &context.partition_result;
840                            let partition_resolver = &self.partition_resolver;
841                            (if let Some(inner) = partition_result {
842                                inner.name()
843                            } else {
844                                return false;
845                            }) == ("aws-us-gov")
846                        })(&mut _diagnostic_collector),
847                        6 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
848                            let partition_result = &context.partition_result;
849                            let partition_resolver = &self.partition_resolver;
850                            (if let Some(inner) = partition_result {
851                                inner.name()
852                            } else {
853                                return false;
854                            }) == ("aws-iso")
855                        })(&mut _diagnostic_collector),
856                        7 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
857                            let partition_result = &context.partition_result;
858                            let partition_resolver = &self.partition_resolver;
859                            (if let Some(inner) = partition_result {
860                                inner.name()
861                            } else {
862                                return false;
863                            }) == ("aws-iso-b")
864                        })(&mut _diagnostic_collector),
865                        8 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
866                            let partition_result = &context.partition_result;
867                            let partition_resolver = &self.partition_resolver;
868                            (if let Some(inner) = partition_result {
869                                inner.name()
870                            } else {
871                                return false;
872                            }) == ("aws-eusc")
873                        })(&mut _diagnostic_collector),
874                        9 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
875                            let partition_result = &context.partition_result;
876                            let partition_resolver = &self.partition_resolver;
877                            (if let Some(inner) = partition_result {
878                                inner.name()
879                            } else {
880                                return false;
881                            }) == ("aws-iso-f")
882                        })(&mut _diagnostic_collector),
883                        10 => (use_fips) == (&true),
884                        11 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
885                            let partition_result = &context.partition_result;
886                            let partition_resolver = &self.partition_resolver;
887                            (if let Some(inner) = partition_result {
888                                inner.supports_fips()
889                            } else {
890                                return false;
891                            }) == (true)
892                        })(&mut _diagnostic_collector),
893                        12 => (use_dual_stack) == (&true),
894                        13 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
895                            let partition_result = &context.partition_result;
896                            let partition_resolver = &self.partition_resolver;
897                            (if let Some(inner) = partition_result {
898                                inner.supports_dual_stack()
899                            } else {
900                                return false;
901                            }) == (true)
902                        })(&mut _diagnostic_collector),
903                        _ => unreachable!("Invalid condition index"),
904                    };
905                    current_ref = if is_complement ^ condition_result { node.high_ref } else { node.low_ref };
906                }
907            }
908        }
909    }
910}
911
912impl crate::config::endpoint::ResolveEndpoint for DefaultResolver {
913    fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a> {
914        // Check single-entry cache (lock-free read via ArcSwap)
915        let cached = self.endpoint_cache.load();
916        if let Some((cached_params, cached_endpoint)) = cached.as_ref() {
917            if cached_params == params {
918                return ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(::std::result::Result::Ok(cached_endpoint.clone()));
919            }
920        }
921        drop(cached);
922        let result = self.resolve_endpoint(params);
923        if let ::std::result::Result::Ok(ref endpoint) = result {
924            self.endpoint_cache.store(::std::sync::Arc::new(Some((params.clone(), endpoint.clone()))));
925        }
926        ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(result)
927    }
928}
929const NODES: [crate::endpoint_lib::bdd_interpreter::BddNode; 23] = [
930    crate::endpoint_lib::bdd_interpreter::BddNode {
931        condition_index: -1,
932        high_ref: 1,
933        low_ref: -1,
934    },
935    crate::endpoint_lib::bdd_interpreter::BddNode {
936        condition_index: 0,
937        high_ref: 22,
938        low_ref: 3,
939    },
940    crate::endpoint_lib::bdd_interpreter::BddNode {
941        condition_index: 1,
942        high_ref: 4,
943        low_ref: 100000015,
944    },
945    crate::endpoint_lib::bdd_interpreter::BddNode {
946        condition_index: 2,
947        high_ref: 5,
948        low_ref: 100000015,
949    },
950    crate::endpoint_lib::bdd_interpreter::BddNode {
951        condition_index: 3,
952        high_ref: 19,
953        low_ref: 6,
954    },
955    crate::endpoint_lib::bdd_interpreter::BddNode {
956        condition_index: 4,
957        high_ref: 19,
958        low_ref: 7,
959    },
960    crate::endpoint_lib::bdd_interpreter::BddNode {
961        condition_index: 5,
962        high_ref: 19,
963        low_ref: 8,
964    },
965    crate::endpoint_lib::bdd_interpreter::BddNode {
966        condition_index: 6,
967        high_ref: 19,
968        low_ref: 9,
969    },
970    crate::endpoint_lib::bdd_interpreter::BddNode {
971        condition_index: 7,
972        high_ref: 19,
973        low_ref: 10,
974    },
975    crate::endpoint_lib::bdd_interpreter::BddNode {
976        condition_index: 8,
977        high_ref: 19,
978        low_ref: 11,
979    },
980    crate::endpoint_lib::bdd_interpreter::BddNode {
981        condition_index: 9,
982        high_ref: 19,
983        low_ref: 12,
984    },
985    crate::endpoint_lib::bdd_interpreter::BddNode {
986        condition_index: 10,
987        high_ref: 15,
988        low_ref: 13,
989    },
990    crate::endpoint_lib::bdd_interpreter::BddNode {
991        condition_index: 12,
992        high_ref: 14,
993        low_ref: 100000014,
994    },
995    crate::endpoint_lib::bdd_interpreter::BddNode {
996        condition_index: 13,
997        high_ref: 100000012,
998        low_ref: 100000013,
999    },
1000    crate::endpoint_lib::bdd_interpreter::BddNode {
1001        condition_index: 11,
1002        high_ref: 17,
1003        low_ref: 16,
1004    },
1005    crate::endpoint_lib::bdd_interpreter::BddNode {
1006        condition_index: 12,
1007        high_ref: 100000009,
1008        low_ref: 100000011,
1009    },
1010    crate::endpoint_lib::bdd_interpreter::BddNode {
1011        condition_index: 12,
1012        high_ref: 18,
1013        low_ref: 100000010,
1014    },
1015    crate::endpoint_lib::bdd_interpreter::BddNode {
1016        condition_index: 13,
1017        high_ref: 100000008,
1018        low_ref: 100000009,
1019    },
1020    crate::endpoint_lib::bdd_interpreter::BddNode {
1021        condition_index: 10,
1022        high_ref: 21,
1023        low_ref: 20,
1024    },
1025    crate::endpoint_lib::bdd_interpreter::BddNode {
1026        condition_index: 12,
1027        high_ref: 100000005,
1028        low_ref: 100000004,
1029    },
1030    crate::endpoint_lib::bdd_interpreter::BddNode {
1031        condition_index: 12,
1032        high_ref: 100000007,
1033        low_ref: 100000006,
1034    },
1035    crate::endpoint_lib::bdd_interpreter::BddNode {
1036        condition_index: 10,
1037        high_ref: 100000001,
1038        low_ref: 23,
1039    },
1040    crate::endpoint_lib::bdd_interpreter::BddNode {
1041        condition_index: 12,
1042        high_ref: 100000002,
1043        low_ref: 100000003,
1044    },
1045];
1046// These are all optional since they are set by conditions and will
1047// all be unset when we start evaluation
1048#[derive(Default)]
1049#[allow(unused_lifetimes)]
1050pub(crate) struct ConditionContext<'a> {
1051    pub(crate) partition_result: Option<crate::endpoint_lib::partition::Partition<'a>>,
1052    // Sometimes none of the members reference the lifetime, this makes it still valid
1053    phantom: std::marker::PhantomData<&'a ()>,
1054}
1055
1056#[non_exhaustive]
1057#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
1058/// Configuration parameters for resolving the correct endpoint
1059pub struct Params {
1060    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
1061    pub(crate) use_dual_stack: bool,
1062    /// 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.
1063    pub(crate) use_fips: bool,
1064    /// Override the endpoint used to send this request
1065    pub(crate) endpoint: ::std::option::Option<::std::string::String>,
1066    /// The AWS region used to dispatch the request.
1067    pub(crate) region: ::std::option::Option<::std::string::String>,
1068}
1069impl Params {
1070    /// Create a builder for [`Params`]
1071    pub fn builder() -> crate::config::endpoint::ParamsBuilder {
1072        crate::config::endpoint::ParamsBuilder::default()
1073    }
1074    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
1075    pub fn use_dual_stack(&self) -> ::std::option::Option<bool> {
1076        Some(self.use_dual_stack)
1077    }
1078    /// 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.
1079    pub fn use_fips(&self) -> ::std::option::Option<bool> {
1080        Some(self.use_fips)
1081    }
1082    /// Override the endpoint used to send this request
1083    pub fn endpoint(&self) -> ::std::option::Option<&str> {
1084        self.endpoint.as_deref()
1085    }
1086    /// The AWS region used to dispatch the request.
1087    pub fn region(&self) -> ::std::option::Option<&str> {
1088        self.region.as_deref()
1089    }
1090}
1091
1092/// Builder for [`Params`]
1093#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
1094pub struct ParamsBuilder {
1095    use_dual_stack: ::std::option::Option<bool>,
1096    use_fips: ::std::option::Option<bool>,
1097    endpoint: ::std::option::Option<::std::string::String>,
1098    region: ::std::option::Option<::std::string::String>,
1099}
1100impl ParamsBuilder {
1101    /// Consume this builder, creating [`Params`].
1102    pub fn build(self) -> ::std::result::Result<crate::config::endpoint::Params, crate::config::endpoint::InvalidParams> {
1103        if let Some(region) = &self.region {
1104            if !crate::endpoint_lib::host::is_valid_host_label(
1105                region.as_ref() as &str,
1106                true,
1107                &mut crate::endpoint_lib::diagnostic::DiagnosticCollector::new(),
1108            ) {
1109                return Err(crate::config::endpoint::InvalidParams::invalid_value(
1110                    "region",
1111                    "must be a valid host label",
1112                ));
1113            }
1114        };
1115        Ok(
1116            #[allow(clippy::unnecessary_lazy_evaluations)]
1117            crate::config::endpoint::Params {
1118                use_dual_stack: self
1119                    .use_dual_stack
1120                    .or_else(|| Some(false))
1121                    .ok_or_else(|| crate::config::endpoint::InvalidParams::missing("use_dual_stack"))?,
1122                use_fips: self
1123                    .use_fips
1124                    .or_else(|| Some(false))
1125                    .ok_or_else(|| crate::config::endpoint::InvalidParams::missing("use_fips"))?,
1126                endpoint: self.endpoint,
1127                region: self.region,
1128            },
1129        )
1130    }
1131    /// Sets the value for use_dual_stack
1132    ///
1133    /// When unset, this parameter has a default value of `false`.
1134    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
1135    pub fn use_dual_stack(mut self, value: impl Into<bool>) -> Self {
1136        self.use_dual_stack = Some(value.into());
1137        self
1138    }
1139
1140    /// Sets the value for use_dual_stack
1141    ///
1142    /// When unset, this parameter has a default value of `false`.
1143    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
1144    pub fn set_use_dual_stack(mut self, param: Option<bool>) -> Self {
1145        self.use_dual_stack = param;
1146        self
1147    }
1148    /// Sets the value for use_fips
1149    ///
1150    /// When unset, this parameter has a default value of `false`.
1151    /// 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.
1152    pub fn use_fips(mut self, value: impl Into<bool>) -> Self {
1153        self.use_fips = Some(value.into());
1154        self
1155    }
1156
1157    /// Sets the value for use_fips
1158    ///
1159    /// When unset, this parameter has a default value of `false`.
1160    /// 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.
1161    pub fn set_use_fips(mut self, param: Option<bool>) -> Self {
1162        self.use_fips = param;
1163        self
1164    }
1165    /// Sets the value for endpoint
1166    ///
1167    /// Override the endpoint used to send this request
1168    pub fn endpoint(mut self, value: impl Into<::std::string::String>) -> Self {
1169        self.endpoint = Some(value.into());
1170        self
1171    }
1172
1173    /// Sets the value for endpoint
1174    ///
1175    /// Override the endpoint used to send this request
1176    pub fn set_endpoint(mut self, param: Option<::std::string::String>) -> Self {
1177        self.endpoint = param;
1178        self
1179    }
1180    /// Sets the value for region
1181    ///
1182    /// The AWS region used to dispatch the request.
1183    pub fn region(mut self, value: impl Into<::std::string::String>) -> Self {
1184        self.region = Some(value.into());
1185        self
1186    }
1187
1188    /// Sets the value for region
1189    ///
1190    /// The AWS region used to dispatch the request.
1191    pub fn set_region(mut self, param: Option<::std::string::String>) -> Self {
1192        self.region = param;
1193        self
1194    }
1195}
1196
1197/// An error that occurred during endpoint resolution
1198#[derive(Debug)]
1199pub struct InvalidParams {
1200    field: std::borrow::Cow<'static, str>,
1201    kind: InvalidParamsErrorKind,
1202}
1203
1204/// The kind of invalid parameter error
1205#[derive(Debug)]
1206enum InvalidParamsErrorKind {
1207    MissingField,
1208    InvalidValue { message: &'static str },
1209}
1210
1211impl InvalidParams {
1212    #[allow(dead_code)]
1213    fn missing(field: &'static str) -> Self {
1214        Self {
1215            field: field.into(),
1216            kind: InvalidParamsErrorKind::MissingField,
1217        }
1218    }
1219
1220    #[allow(dead_code)]
1221    fn invalid_value(field: &'static str, message: &'static str) -> Self {
1222        Self {
1223            field: field.into(),
1224            kind: InvalidParamsErrorKind::InvalidValue { message },
1225        }
1226    }
1227}
1228
1229impl std::fmt::Display for InvalidParams {
1230    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1231        match self.kind {
1232            InvalidParamsErrorKind::MissingField => write!(f, "a required field was missing: `{}`", self.field),
1233            InvalidParamsErrorKind::InvalidValue { message } => write!(f, "invalid value for field: `{}` - {}", self.field, message),
1234        }
1235    }
1236}
1237
1238impl std::error::Error for InvalidParams {}