Skip to main content

aws_sdk_cloudfront/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://cloudfront-fips.global.api.aws");
94        assert_eq!(
95            endpoint,
96            ::aws_smithy_types::endpoint::Endpoint::builder()
97                .url("https://cloudfront-fips.global.api.aws")
98                .property(
99                    "authSchemes",
100                    vec![{
101                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
102                        out.insert("name".to_string(), "sigv4".to_string().into());
103                        out.insert("signingRegion".to_string(), "us-east-1".to_string().into());
104                        out
105                    }
106                    .into()]
107                )
108                .build()
109        );
110    }
111
112    /// For region us-east-1 with FIPS enabled and DualStack disabled
113    #[test]
114    fn test_5() {
115        let params = crate::config::endpoint::Params::builder()
116            .region("us-east-1".to_string())
117            .use_fips(true)
118            .use_dual_stack(false)
119            .build()
120            .expect("invalid params");
121        let resolver = crate::config::endpoint::DefaultResolver::new();
122        let endpoint = resolver.resolve_endpoint(&params);
123        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront-fips.amazonaws.com");
124        assert_eq!(
125            endpoint,
126            ::aws_smithy_types::endpoint::Endpoint::builder()
127                .url("https://cloudfront-fips.amazonaws.com")
128                .property(
129                    "authSchemes",
130                    vec![{
131                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
132                        out.insert("name".to_string(), "sigv4".to_string().into());
133                        out.insert("signingRegion".to_string(), "us-east-1".to_string().into());
134                        out
135                    }
136                    .into()]
137                )
138                .build()
139        );
140    }
141
142    /// For region us-east-1 with FIPS disabled and DualStack enabled
143    #[test]
144    fn test_6() {
145        let params = crate::config::endpoint::Params::builder()
146            .region("us-east-1".to_string())
147            .use_fips(false)
148            .use_dual_stack(true)
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://cloudfront.global.api.aws");
154        assert_eq!(
155            endpoint,
156            ::aws_smithy_types::endpoint::Endpoint::builder()
157                .url("https://cloudfront.global.api.aws")
158                .property(
159                    "authSchemes",
160                    vec![{
161                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
162                        out.insert("name".to_string(), "sigv4".to_string().into());
163                        out.insert("signingRegion".to_string(), "us-east-1".to_string().into());
164                        out
165                    }
166                    .into()]
167                )
168                .build()
169        );
170    }
171
172    /// For region us-east-1 with FIPS disabled and DualStack disabled
173    #[test]
174    fn test_7() {
175        let params = crate::config::endpoint::Params::builder()
176            .region("us-east-1".to_string())
177            .use_fips(false)
178            .use_dual_stack(false)
179            .build()
180            .expect("invalid params");
181        let resolver = crate::config::endpoint::DefaultResolver::new();
182        let endpoint = resolver.resolve_endpoint(&params);
183        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront.amazonaws.com");
184        assert_eq!(
185            endpoint,
186            ::aws_smithy_types::endpoint::Endpoint::builder()
187                .url("https://cloudfront.amazonaws.com")
188                .property(
189                    "authSchemes",
190                    vec![{
191                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
192                        out.insert("name".to_string(), "sigv4".to_string().into());
193                        out.insert("signingRegion".to_string(), "us-east-1".to_string().into());
194                        out
195                    }
196                    .into()]
197                )
198                .build()
199        );
200    }
201
202    /// For region cn-northwest-1 with FIPS enabled and DualStack enabled
203    #[test]
204    fn test_8() {
205        let params = crate::config::endpoint::Params::builder()
206            .region("cn-northwest-1".to_string())
207            .use_fips(true)
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://cloudfront-fips.api.amazonwebservices.com.cn");
214        assert_eq!(
215            endpoint,
216            ::aws_smithy_types::endpoint::Endpoint::builder()
217                .url("https://cloudfront-fips.api.amazonwebservices.com.cn")
218                .property(
219                    "authSchemes",
220                    vec![{
221                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
222                        out.insert("name".to_string(), "sigv4".to_string().into());
223                        out.insert("signingRegion".to_string(), "cn-northwest-1".to_string().into());
224                        out
225                    }
226                    .into()]
227                )
228                .build()
229        );
230    }
231
232    /// For region cn-northwest-1 with FIPS enabled and DualStack disabled
233    #[test]
234    fn test_9() {
235        let params = crate::config::endpoint::Params::builder()
236            .region("cn-northwest-1".to_string())
237            .use_fips(true)
238            .use_dual_stack(false)
239            .build()
240            .expect("invalid params");
241        let resolver = crate::config::endpoint::DefaultResolver::new();
242        let endpoint = resolver.resolve_endpoint(&params);
243        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront-fips.cn-northwest-1.amazonaws.com.cn");
244        assert_eq!(
245            endpoint,
246            ::aws_smithy_types::endpoint::Endpoint::builder()
247                .url("https://cloudfront-fips.cn-northwest-1.amazonaws.com.cn")
248                .property(
249                    "authSchemes",
250                    vec![{
251                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
252                        out.insert("name".to_string(), "sigv4".to_string().into());
253                        out.insert("signingRegion".to_string(), "cn-northwest-1".to_string().into());
254                        out
255                    }
256                    .into()]
257                )
258                .build()
259        );
260    }
261
262    /// For region cn-northwest-1 with FIPS disabled and DualStack enabled
263    #[test]
264    fn test_10() {
265        let params = crate::config::endpoint::Params::builder()
266            .region("cn-northwest-1".to_string())
267            .use_fips(false)
268            .use_dual_stack(true)
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://cloudfront.api.amazonwebservices.com.cn");
274        assert_eq!(
275            endpoint,
276            ::aws_smithy_types::endpoint::Endpoint::builder()
277                .url("https://cloudfront.api.amazonwebservices.com.cn")
278                .property(
279                    "authSchemes",
280                    vec![{
281                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
282                        out.insert("name".to_string(), "sigv4".to_string().into());
283                        out.insert("signingRegion".to_string(), "cn-northwest-1".to_string().into());
284                        out
285                    }
286                    .into()]
287                )
288                .build()
289        );
290    }
291
292    /// For region cn-northwest-1 with FIPS disabled and DualStack disabled
293    #[test]
294    fn test_11() {
295        let params = crate::config::endpoint::Params::builder()
296            .region("cn-northwest-1".to_string())
297            .use_fips(false)
298            .use_dual_stack(false)
299            .build()
300            .expect("invalid params");
301        let resolver = crate::config::endpoint::DefaultResolver::new();
302        let endpoint = resolver.resolve_endpoint(&params);
303        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront.cn-northwest-1.amazonaws.com.cn");
304        assert_eq!(
305            endpoint,
306            ::aws_smithy_types::endpoint::Endpoint::builder()
307                .url("https://cloudfront.cn-northwest-1.amazonaws.com.cn")
308                .property(
309                    "authSchemes",
310                    vec![{
311                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
312                        out.insert("name".to_string(), "sigv4".to_string().into());
313                        out.insert("signingRegion".to_string(), "cn-northwest-1".to_string().into());
314                        out
315                    }
316                    .into()]
317                )
318                .build()
319        );
320    }
321
322    /// For region eusc-de-east-1 with FIPS enabled and DualStack disabled
323    #[test]
324    fn test_12() {
325        let params = crate::config::endpoint::Params::builder()
326            .region("eusc-de-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://cloudfront-fips.amazonaws.eu");
334        assert_eq!(
335            endpoint,
336            ::aws_smithy_types::endpoint::Endpoint::builder()
337                .url("https://cloudfront-fips.amazonaws.eu")
338                .property(
339                    "authSchemes",
340                    vec![{
341                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
342                        out.insert("name".to_string(), "sigv4".to_string().into());
343                        out.insert("signingRegion".to_string(), "eusc-de-east-1".to_string().into());
344                        out
345                    }
346                    .into()]
347                )
348                .build()
349        );
350    }
351
352    /// For region eusc-de-east-1 with FIPS disabled and DualStack disabled
353    #[test]
354    fn test_13() {
355        let params = crate::config::endpoint::Params::builder()
356            .region("eusc-de-east-1".to_string())
357            .use_fips(false)
358            .use_dual_stack(false)
359            .build()
360            .expect("invalid params");
361        let resolver = crate::config::endpoint::DefaultResolver::new();
362        let endpoint = resolver.resolve_endpoint(&params);
363        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront.amazonaws.eu");
364        assert_eq!(
365            endpoint,
366            ::aws_smithy_types::endpoint::Endpoint::builder()
367                .url("https://cloudfront.amazonaws.eu")
368                .property(
369                    "authSchemes",
370                    vec![{
371                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
372                        out.insert("name".to_string(), "sigv4".to_string().into());
373                        out.insert("signingRegion".to_string(), "eusc-de-east-1".to_string().into());
374                        out
375                    }
376                    .into()]
377                )
378                .build()
379        );
380    }
381
382    /// For region us-iso-east-1 with FIPS enabled and DualStack disabled
383    #[test]
384    fn test_14() {
385        let params = crate::config::endpoint::Params::builder()
386            .region("us-iso-east-1".to_string())
387            .use_fips(true)
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://cloudfront-fips.c2s.ic.gov");
394        assert_eq!(
395            endpoint,
396            ::aws_smithy_types::endpoint::Endpoint::builder()
397                .url("https://cloudfront-fips.c2s.ic.gov")
398                .property(
399                    "authSchemes",
400                    vec![{
401                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
402                        out.insert("name".to_string(), "sigv4".to_string().into());
403                        out.insert("signingRegion".to_string(), "us-iso-east-1".to_string().into());
404                        out
405                    }
406                    .into()]
407                )
408                .build()
409        );
410    }
411
412    /// For region us-iso-east-1 with FIPS disabled and DualStack disabled
413    #[test]
414    fn test_15() {
415        let params = crate::config::endpoint::Params::builder()
416            .region("us-iso-east-1".to_string())
417            .use_fips(false)
418            .use_dual_stack(false)
419            .build()
420            .expect("invalid params");
421        let resolver = crate::config::endpoint::DefaultResolver::new();
422        let endpoint = resolver.resolve_endpoint(&params);
423        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront.c2s.ic.gov");
424        assert_eq!(
425            endpoint,
426            ::aws_smithy_types::endpoint::Endpoint::builder()
427                .url("https://cloudfront.c2s.ic.gov")
428                .property(
429                    "authSchemes",
430                    vec![{
431                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
432                        out.insert("name".to_string(), "sigv4".to_string().into());
433                        out.insert("signingRegion".to_string(), "us-iso-east-1".to_string().into());
434                        out
435                    }
436                    .into()]
437                )
438                .build()
439        );
440    }
441
442    /// For region us-isob-east-1 with FIPS enabled and DualStack disabled
443    #[test]
444    fn test_16() {
445        let params = crate::config::endpoint::Params::builder()
446            .region("us-isob-east-1".to_string())
447            .use_fips(true)
448            .use_dual_stack(false)
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://cloudfront-fips.sc2s.sgov.gov");
454        assert_eq!(
455            endpoint,
456            ::aws_smithy_types::endpoint::Endpoint::builder()
457                .url("https://cloudfront-fips.sc2s.sgov.gov")
458                .property(
459                    "authSchemes",
460                    vec![{
461                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
462                        out.insert("name".to_string(), "sigv4".to_string().into());
463                        out.insert("signingRegion".to_string(), "us-isob-east-1".to_string().into());
464                        out
465                    }
466                    .into()]
467                )
468                .build()
469        );
470    }
471
472    /// For region us-isob-east-1 with FIPS disabled and DualStack disabled
473    #[test]
474    fn test_17() {
475        let params = crate::config::endpoint::Params::builder()
476            .region("us-isob-east-1".to_string())
477            .use_fips(false)
478            .use_dual_stack(false)
479            .build()
480            .expect("invalid params");
481        let resolver = crate::config::endpoint::DefaultResolver::new();
482        let endpoint = resolver.resolve_endpoint(&params);
483        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront.sc2s.sgov.gov");
484        assert_eq!(
485            endpoint,
486            ::aws_smithy_types::endpoint::Endpoint::builder()
487                .url("https://cloudfront.sc2s.sgov.gov")
488                .property(
489                    "authSchemes",
490                    vec![{
491                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
492                        out.insert("name".to_string(), "sigv4".to_string().into());
493                        out.insert("signingRegion".to_string(), "us-isob-east-1".to_string().into());
494                        out
495                    }
496                    .into()]
497                )
498                .build()
499        );
500    }
501
502    /// For region eu-isoe-west-1 with FIPS enabled and DualStack disabled
503    #[test]
504    fn test_18() {
505        let params = crate::config::endpoint::Params::builder()
506            .region("eu-isoe-west-1".to_string())
507            .use_fips(true)
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://cloudfront-fips.cloud.adc-e.uk");
514        assert_eq!(
515            endpoint,
516            ::aws_smithy_types::endpoint::Endpoint::builder()
517                .url("https://cloudfront-fips.cloud.adc-e.uk")
518                .property(
519                    "authSchemes",
520                    vec![{
521                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
522                        out.insert("name".to_string(), "sigv4".to_string().into());
523                        out.insert("signingRegion".to_string(), "eu-isoe-west-1".to_string().into());
524                        out
525                    }
526                    .into()]
527                )
528                .build()
529        );
530    }
531
532    /// For region eu-isoe-west-1 with FIPS disabled and DualStack disabled
533    #[test]
534    fn test_19() {
535        let params = crate::config::endpoint::Params::builder()
536            .region("eu-isoe-west-1".to_string())
537            .use_fips(false)
538            .use_dual_stack(false)
539            .build()
540            .expect("invalid params");
541        let resolver = crate::config::endpoint::DefaultResolver::new();
542        let endpoint = resolver.resolve_endpoint(&params);
543        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront.cloud.adc-e.uk");
544        assert_eq!(
545            endpoint,
546            ::aws_smithy_types::endpoint::Endpoint::builder()
547                .url("https://cloudfront.cloud.adc-e.uk")
548                .property(
549                    "authSchemes",
550                    vec![{
551                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
552                        out.insert("name".to_string(), "sigv4".to_string().into());
553                        out.insert("signingRegion".to_string(), "eu-isoe-west-1".to_string().into());
554                        out
555                    }
556                    .into()]
557                )
558                .build()
559        );
560    }
561
562    /// For region us-isof-south-1 with FIPS enabled and DualStack disabled
563    #[test]
564    fn test_20() {
565        let params = crate::config::endpoint::Params::builder()
566            .region("us-isof-south-1".to_string())
567            .use_fips(true)
568            .use_dual_stack(false)
569            .build()
570            .expect("invalid params");
571        let resolver = crate::config::endpoint::DefaultResolver::new();
572        let endpoint = resolver.resolve_endpoint(&params);
573        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront-fips.csp.hci.ic.gov");
574        assert_eq!(
575            endpoint,
576            ::aws_smithy_types::endpoint::Endpoint::builder()
577                .url("https://cloudfront-fips.csp.hci.ic.gov")
578                .property(
579                    "authSchemes",
580                    vec![{
581                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
582                        out.insert("name".to_string(), "sigv4".to_string().into());
583                        out.insert("signingRegion".to_string(), "us-isof-south-1".to_string().into());
584                        out
585                    }
586                    .into()]
587                )
588                .build()
589        );
590    }
591
592    /// For region us-isof-south-1 with FIPS disabled and DualStack disabled
593    #[test]
594    fn test_21() {
595        let params = crate::config::endpoint::Params::builder()
596            .region("us-isof-south-1".to_string())
597            .use_fips(false)
598            .use_dual_stack(false)
599            .build()
600            .expect("invalid params");
601        let resolver = crate::config::endpoint::DefaultResolver::new();
602        let endpoint = resolver.resolve_endpoint(&params);
603        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront.csp.hci.ic.gov");
604        assert_eq!(
605            endpoint,
606            ::aws_smithy_types::endpoint::Endpoint::builder()
607                .url("https://cloudfront.csp.hci.ic.gov")
608                .property(
609                    "authSchemes",
610                    vec![{
611                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
612                        out.insert("name".to_string(), "sigv4".to_string().into());
613                        out.insert("signingRegion".to_string(), "us-isof-south-1".to_string().into());
614                        out
615                    }
616                    .into()]
617                )
618                .build()
619        );
620    }
621
622    /// For region us-gov-west-1 with FIPS enabled and DualStack enabled
623    #[test]
624    fn test_22() {
625        let params = crate::config::endpoint::Params::builder()
626            .region("us-gov-west-1".to_string())
627            .use_fips(true)
628            .use_dual_stack(true)
629            .build()
630            .expect("invalid params");
631        let resolver = crate::config::endpoint::DefaultResolver::new();
632        let endpoint = resolver.resolve_endpoint(&params);
633        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront-fips.api.aws");
634        assert_eq!(
635            endpoint,
636            ::aws_smithy_types::endpoint::Endpoint::builder()
637                .url("https://cloudfront-fips.api.aws")
638                .property(
639                    "authSchemes",
640                    vec![{
641                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
642                        out.insert("name".to_string(), "sigv4".to_string().into());
643                        out.insert("signingRegion".to_string(), "us-gov-west-1".to_string().into());
644                        out
645                    }
646                    .into()]
647                )
648                .build()
649        );
650    }
651
652    /// For region us-gov-west-1 with FIPS enabled and DualStack disabled
653    #[test]
654    fn test_23() {
655        let params = crate::config::endpoint::Params::builder()
656            .region("us-gov-west-1".to_string())
657            .use_fips(true)
658            .use_dual_stack(false)
659            .build()
660            .expect("invalid params");
661        let resolver = crate::config::endpoint::DefaultResolver::new();
662        let endpoint = resolver.resolve_endpoint(&params);
663        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront-fips.amazonaws.com");
664        assert_eq!(
665            endpoint,
666            ::aws_smithy_types::endpoint::Endpoint::builder()
667                .url("https://cloudfront-fips.amazonaws.com")
668                .property(
669                    "authSchemes",
670                    vec![{
671                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
672                        out.insert("name".to_string(), "sigv4".to_string().into());
673                        out.insert("signingRegion".to_string(), "us-gov-west-1".to_string().into());
674                        out
675                    }
676                    .into()]
677                )
678                .build()
679        );
680    }
681
682    /// For region us-gov-west-1 with FIPS disabled and DualStack enabled
683    #[test]
684    fn test_24() {
685        let params = crate::config::endpoint::Params::builder()
686            .region("us-gov-west-1".to_string())
687            .use_fips(false)
688            .use_dual_stack(true)
689            .build()
690            .expect("invalid params");
691        let resolver = crate::config::endpoint::DefaultResolver::new();
692        let endpoint = resolver.resolve_endpoint(&params);
693        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront.api.aws");
694        assert_eq!(
695            endpoint,
696            ::aws_smithy_types::endpoint::Endpoint::builder()
697                .url("https://cloudfront.api.aws")
698                .property(
699                    "authSchemes",
700                    vec![{
701                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
702                        out.insert("name".to_string(), "sigv4".to_string().into());
703                        out.insert("signingRegion".to_string(), "us-gov-west-1".to_string().into());
704                        out
705                    }
706                    .into()]
707                )
708                .build()
709        );
710    }
711
712    /// For region us-gov-west-1 with FIPS disabled and DualStack disabled
713    #[test]
714    fn test_25() {
715        let params = crate::config::endpoint::Params::builder()
716            .region("us-gov-west-1".to_string())
717            .use_fips(false)
718            .use_dual_stack(false)
719            .build()
720            .expect("invalid params");
721        let resolver = crate::config::endpoint::DefaultResolver::new();
722        let endpoint = resolver.resolve_endpoint(&params);
723        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront.amazonaws.com");
724        assert_eq!(
725            endpoint,
726            ::aws_smithy_types::endpoint::Endpoint::builder()
727                .url("https://cloudfront.amazonaws.com")
728                .property(
729                    "authSchemes",
730                    vec![{
731                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
732                        out.insert("name".to_string(), "sigv4".to_string().into());
733                        out.insert("signingRegion".to_string(), "us-gov-west-1".to_string().into());
734                        out
735                    }
736                    .into()]
737                )
738                .build()
739        );
740    }
741
742    /// Missing region
743    #[test]
744    fn test_26() {
745        let params = crate::config::endpoint::Params::builder().build().expect("invalid params");
746        let resolver = crate::config::endpoint::DefaultResolver::new();
747        let endpoint = resolver.resolve_endpoint(&params);
748        let error = endpoint.expect_err("expected error: Invalid Configuration: Missing Region [Missing region]");
749        assert_eq!(format!("{}", error), "Invalid Configuration: Missing Region")
750    }
751}
752
753/// Endpoint resolver trait specific to Amazon CloudFront
754pub trait ResolveEndpoint: ::std::marker::Send + ::std::marker::Sync + ::std::fmt::Debug {
755    /// Resolve an endpoint with the given parameters
756    fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a>;
757
758    /// Convert this service-specific resolver into a `SharedEndpointResolver`
759    ///
760    /// The resulting resolver will downcast `EndpointResolverParams` into `crate::config::endpoint::Params`.
761    fn into_shared_resolver(self) -> ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver
762    where
763        Self: Sized + 'static,
764    {
765        ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver::new(DowncastParams(self))
766    }
767}
768
769#[derive(Debug)]
770struct DowncastParams<T>(T);
771impl<T> ::aws_smithy_runtime_api::client::endpoint::ResolveEndpoint for DowncastParams<T>
772where
773    T: ResolveEndpoint,
774{
775    fn resolve_endpoint<'a>(
776        &'a self,
777        params: &'a ::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams,
778    ) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a> {
779        let ep = match params.get::<crate::config::endpoint::Params>() {
780            Some(params) => self.0.resolve_endpoint(params),
781            None => ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(Err("params of expected type was not present".into())),
782        };
783        ep
784    }
785}
786
787/// The default endpoint resolver
788#[derive(Debug, Default)]
789pub struct DefaultResolver {
790    partition_resolver: crate::endpoint_lib::partition::PartitionResolver,
791}
792
793impl DefaultResolver {
794    /// Create a new endpoint resolver with default settings
795    pub fn new() -> Self {
796        Self {
797            partition_resolver: crate::endpoint_lib::DEFAULT_PARTITION_RESOLVER.clone(),
798        }
799    }
800
801    fn resolve_endpoint(
802        &self,
803        params: &crate::config::endpoint::Params,
804    ) -> ::std::result::Result<::aws_smithy_types::endpoint::Endpoint, ::aws_smithy_runtime_api::box_error::BoxError> {
805        let mut diagnostic_collector = crate::endpoint_lib::diagnostic::DiagnosticCollector::new();
806        Ok(
807            crate::config::endpoint::internals::resolve_endpoint(params, &mut diagnostic_collector, &self.partition_resolver)
808                .map_err(|err| err.with_source(diagnostic_collector.take_last_error()))?,
809        )
810    }
811}
812
813impl crate::config::endpoint::ResolveEndpoint for DefaultResolver {
814    fn resolve_endpoint(&self, params: &crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'_> {
815        ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(self.resolve_endpoint(params))
816    }
817}
818
819#[non_exhaustive]
820#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
821/// Configuration parameters for resolving the correct endpoint
822pub struct Params {
823    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
824    pub(crate) use_dual_stack: bool,
825    /// 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.
826    pub(crate) use_fips: bool,
827    /// Override the endpoint used to send this request
828    pub(crate) endpoint: ::std::option::Option<::std::string::String>,
829    /// The AWS region used to dispatch the request.
830    pub(crate) region: ::std::option::Option<::std::string::String>,
831}
832impl Params {
833    /// Create a builder for [`Params`]
834    pub fn builder() -> crate::config::endpoint::ParamsBuilder {
835        crate::config::endpoint::ParamsBuilder::default()
836    }
837    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
838    pub fn use_dual_stack(&self) -> ::std::option::Option<bool> {
839        Some(self.use_dual_stack)
840    }
841    /// 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.
842    pub fn use_fips(&self) -> ::std::option::Option<bool> {
843        Some(self.use_fips)
844    }
845    /// Override the endpoint used to send this request
846    pub fn endpoint(&self) -> ::std::option::Option<&str> {
847        self.endpoint.as_deref()
848    }
849    /// The AWS region used to dispatch the request.
850    pub fn region(&self) -> ::std::option::Option<&str> {
851        self.region.as_deref()
852    }
853}
854
855/// Builder for [`Params`]
856#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
857pub struct ParamsBuilder {
858    use_dual_stack: ::std::option::Option<bool>,
859    use_fips: ::std::option::Option<bool>,
860    endpoint: ::std::option::Option<::std::string::String>,
861    region: ::std::option::Option<::std::string::String>,
862}
863impl ParamsBuilder {
864    /// Consume this builder, creating [`Params`].
865    pub fn build(self) -> ::std::result::Result<crate::config::endpoint::Params, crate::config::endpoint::InvalidParams> {
866        if let Some(region) = &self.region {
867            if !crate::endpoint_lib::host::is_valid_host_label(
868                region.as_ref() as &str,
869                true,
870                &mut crate::endpoint_lib::diagnostic::DiagnosticCollector::new(),
871            ) {
872                return Err(crate::config::endpoint::InvalidParams::invalid_value(
873                    "region",
874                    "must be a valid host label",
875                ));
876            }
877        };
878        Ok(
879            #[allow(clippy::unnecessary_lazy_evaluations)]
880            crate::config::endpoint::Params {
881                use_dual_stack: self
882                    .use_dual_stack
883                    .or_else(|| Some(false))
884                    .ok_or_else(|| crate::config::endpoint::InvalidParams::missing("use_dual_stack"))?,
885                use_fips: self
886                    .use_fips
887                    .or_else(|| Some(false))
888                    .ok_or_else(|| crate::config::endpoint::InvalidParams::missing("use_fips"))?,
889                endpoint: self.endpoint,
890                region: self.region,
891            },
892        )
893    }
894    /// Sets the value for use_dual_stack
895    ///
896    /// When unset, this parameter has a default value of `false`.
897    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
898    pub fn use_dual_stack(mut self, value: impl Into<bool>) -> Self {
899        self.use_dual_stack = Some(value.into());
900        self
901    }
902
903    /// Sets the value for use_dual_stack
904    ///
905    /// When unset, this parameter has a default value of `false`.
906    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
907    pub fn set_use_dual_stack(mut self, param: Option<bool>) -> Self {
908        self.use_dual_stack = param;
909        self
910    }
911    /// Sets the value for use_fips
912    ///
913    /// When unset, this parameter has a default value of `false`.
914    /// 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.
915    pub fn use_fips(mut self, value: impl Into<bool>) -> Self {
916        self.use_fips = Some(value.into());
917        self
918    }
919
920    /// Sets the value for use_fips
921    ///
922    /// When unset, this parameter has a default value of `false`.
923    /// 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.
924    pub fn set_use_fips(mut self, param: Option<bool>) -> Self {
925        self.use_fips = param;
926        self
927    }
928    /// Sets the value for endpoint
929    ///
930    /// Override the endpoint used to send this request
931    pub fn endpoint(mut self, value: impl Into<::std::string::String>) -> Self {
932        self.endpoint = Some(value.into());
933        self
934    }
935
936    /// Sets the value for endpoint
937    ///
938    /// Override the endpoint used to send this request
939    pub fn set_endpoint(mut self, param: Option<::std::string::String>) -> Self {
940        self.endpoint = param;
941        self
942    }
943    /// Sets the value for region
944    ///
945    /// The AWS region used to dispatch the request.
946    pub fn region(mut self, value: impl Into<::std::string::String>) -> Self {
947        self.region = Some(value.into());
948        self
949    }
950
951    /// Sets the value for region
952    ///
953    /// The AWS region used to dispatch the request.
954    pub fn set_region(mut self, param: Option<::std::string::String>) -> Self {
955        self.region = param;
956        self
957    }
958}
959
960/// An error that occurred during endpoint resolution
961#[derive(Debug)]
962pub struct InvalidParams {
963    field: std::borrow::Cow<'static, str>,
964    kind: InvalidParamsErrorKind,
965}
966
967/// The kind of invalid parameter error
968#[derive(Debug)]
969enum InvalidParamsErrorKind {
970    MissingField,
971    InvalidValue { message: &'static str },
972}
973
974impl InvalidParams {
975    #[allow(dead_code)]
976    fn missing(field: &'static str) -> Self {
977        Self {
978            field: field.into(),
979            kind: InvalidParamsErrorKind::MissingField,
980        }
981    }
982
983    #[allow(dead_code)]
984    fn invalid_value(field: &'static str, message: &'static str) -> Self {
985        Self {
986            field: field.into(),
987            kind: InvalidParamsErrorKind::InvalidValue { message },
988        }
989    }
990}
991
992impl std::fmt::Display for InvalidParams {
993    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
994        match self.kind {
995            InvalidParamsErrorKind::MissingField => write!(f, "a required field was missing: `{}`", self.field),
996            InvalidParamsErrorKind::InvalidValue { message } => write!(f, "invalid value for field: `{}` - {}", self.field, message),
997        }
998    }
999}
1000
1001impl std::error::Error for InvalidParams {}
1002
1003mod internals;