Skip to main content

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