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#[cfg(test)]
7mod test {
8
9    /// For region aws-global with FIPS disabled and DualStack disabled
10    #[test]
11    fn test_1() {
12        let params = crate::config::endpoint::Params::builder()
13            .region("aws-global".to_string())
14            .use_fips(false)
15            .use_dual_stack(false)
16            .build()
17            .expect("invalid params");
18        let resolver = crate::config::endpoint::DefaultResolver::new();
19        let endpoint = resolver.resolve_endpoint(&params);
20        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront.amazonaws.com");
21        assert_eq!(
22            endpoint,
23            ::aws_smithy_types::endpoint::Endpoint::builder()
24                .url("https://cloudfront.amazonaws.com")
25                .property(
26                    "authSchemes",
27                    vec![{
28                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
29                        out.insert("name".to_string(), "sigv4".to_string().into());
30                        out.insert("signingName".to_string(), "cloudfront".to_string().into());
31                        out.insert("signingRegion".to_string(), "us-east-1".to_string().into());
32                        out
33                    }
34                    .into()]
35                )
36                .build()
37        );
38    }
39
40    /// For region aws-global with FIPS enabled and DualStack disabled
41    #[test]
42    fn test_2() {
43        let params = crate::config::endpoint::Params::builder()
44            .region("aws-global".to_string())
45            .use_fips(true)
46            .use_dual_stack(false)
47            .build()
48            .expect("invalid params");
49        let resolver = crate::config::endpoint::DefaultResolver::new();
50        let endpoint = resolver.resolve_endpoint(&params);
51        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront-fips.amazonaws.com");
52        assert_eq!(
53            endpoint,
54            ::aws_smithy_types::endpoint::Endpoint::builder()
55                .url("https://cloudfront-fips.amazonaws.com")
56                .property(
57                    "authSchemes",
58                    vec![{
59                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
60                        out.insert("name".to_string(), "sigv4".to_string().into());
61                        out.insert("signingName".to_string(), "cloudfront".to_string().into());
62                        out.insert("signingRegion".to_string(), "us-east-1".to_string().into());
63                        out
64                    }
65                    .into()]
66                )
67                .build()
68        );
69    }
70
71    /// For region us-east-1 with FIPS enabled and DualStack enabled
72    #[test]
73    fn test_3() {
74        let params = crate::config::endpoint::Params::builder()
75            .region("us-east-1".to_string())
76            .use_fips(true)
77            .use_dual_stack(true)
78            .build()
79            .expect("invalid params");
80        let resolver = crate::config::endpoint::DefaultResolver::new();
81        let endpoint = resolver.resolve_endpoint(&params);
82        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront-fips.us-east-1.api.aws");
83        assert_eq!(
84            endpoint,
85            ::aws_smithy_types::endpoint::Endpoint::builder()
86                .url("https://cloudfront-fips.us-east-1.api.aws")
87                .build()
88        );
89    }
90
91    /// For region us-east-1 with FIPS enabled and DualStack disabled
92    #[test]
93    fn test_4() {
94        let params = crate::config::endpoint::Params::builder()
95            .region("us-east-1".to_string())
96            .use_fips(true)
97            .use_dual_stack(false)
98            .build()
99            .expect("invalid params");
100        let resolver = crate::config::endpoint::DefaultResolver::new();
101        let endpoint = resolver.resolve_endpoint(&params);
102        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront-fips.amazonaws.com");
103        assert_eq!(
104            endpoint,
105            ::aws_smithy_types::endpoint::Endpoint::builder()
106                .url("https://cloudfront-fips.amazonaws.com")
107                .property(
108                    "authSchemes",
109                    vec![{
110                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
111                        out.insert("name".to_string(), "sigv4".to_string().into());
112                        out.insert("signingName".to_string(), "cloudfront".to_string().into());
113                        out.insert("signingRegion".to_string(), "us-east-1".to_string().into());
114                        out
115                    }
116                    .into()]
117                )
118                .build()
119        );
120    }
121
122    /// For region us-east-1 with FIPS disabled and DualStack enabled
123    #[test]
124    fn test_5() {
125        let params = crate::config::endpoint::Params::builder()
126            .region("us-east-1".to_string())
127            .use_fips(false)
128            .use_dual_stack(true)
129            .build()
130            .expect("invalid params");
131        let resolver = crate::config::endpoint::DefaultResolver::new();
132        let endpoint = resolver.resolve_endpoint(&params);
133        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront.us-east-1.api.aws");
134        assert_eq!(
135            endpoint,
136            ::aws_smithy_types::endpoint::Endpoint::builder()
137                .url("https://cloudfront.us-east-1.api.aws")
138                .build()
139        );
140    }
141
142    /// For region us-east-1 with FIPS disabled and DualStack disabled
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(false)
149            .build()
150            .expect("invalid params");
151        let resolver = crate::config::endpoint::DefaultResolver::new();
152        let endpoint = resolver.resolve_endpoint(&params);
153        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront.amazonaws.com");
154        assert_eq!(
155            endpoint,
156            ::aws_smithy_types::endpoint::Endpoint::builder()
157                .url("https://cloudfront.amazonaws.com")
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("signingName".to_string(), "cloudfront".to_string().into());
164                        out.insert("signingRegion".to_string(), "us-east-1".to_string().into());
165                        out
166                    }
167                    .into()]
168                )
169                .build()
170        );
171    }
172
173    /// For region aws-cn-global with FIPS disabled and DualStack disabled
174    #[test]
175    fn test_7() {
176        let params = crate::config::endpoint::Params::builder()
177            .region("aws-cn-global".to_string())
178            .use_fips(false)
179            .use_dual_stack(false)
180            .build()
181            .expect("invalid params");
182        let resolver = crate::config::endpoint::DefaultResolver::new();
183        let endpoint = resolver.resolve_endpoint(&params);
184        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront.cn-northwest-1.amazonaws.com.cn");
185        assert_eq!(
186            endpoint,
187            ::aws_smithy_types::endpoint::Endpoint::builder()
188                .url("https://cloudfront.cn-northwest-1.amazonaws.com.cn")
189                .property(
190                    "authSchemes",
191                    vec![{
192                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
193                        out.insert("name".to_string(), "sigv4".to_string().into());
194                        out.insert("signingName".to_string(), "cloudfront".to_string().into());
195                        out.insert("signingRegion".to_string(), "cn-northwest-1".to_string().into());
196                        out
197                    }
198                    .into()]
199                )
200                .build()
201        );
202    }
203
204    /// For region cn-north-1 with FIPS enabled and DualStack enabled
205    #[test]
206    fn test_8() {
207        let params = crate::config::endpoint::Params::builder()
208            .region("cn-north-1".to_string())
209            .use_fips(true)
210            .use_dual_stack(true)
211            .build()
212            .expect("invalid params");
213        let resolver = crate::config::endpoint::DefaultResolver::new();
214        let endpoint = resolver.resolve_endpoint(&params);
215        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront-fips.cn-north-1.api.amazonwebservices.com.cn");
216        assert_eq!(
217            endpoint,
218            ::aws_smithy_types::endpoint::Endpoint::builder()
219                .url("https://cloudfront-fips.cn-north-1.api.amazonwebservices.com.cn")
220                .build()
221        );
222    }
223
224    /// For region cn-north-1 with FIPS enabled and DualStack disabled
225    #[test]
226    fn test_9() {
227        let params = crate::config::endpoint::Params::builder()
228            .region("cn-north-1".to_string())
229            .use_fips(true)
230            .use_dual_stack(false)
231            .build()
232            .expect("invalid params");
233        let resolver = crate::config::endpoint::DefaultResolver::new();
234        let endpoint = resolver.resolve_endpoint(&params);
235        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront-fips.cn-north-1.amazonaws.com.cn");
236        assert_eq!(
237            endpoint,
238            ::aws_smithy_types::endpoint::Endpoint::builder()
239                .url("https://cloudfront-fips.cn-north-1.amazonaws.com.cn")
240                .build()
241        );
242    }
243
244    /// For region cn-north-1 with FIPS disabled and DualStack enabled
245    #[test]
246    fn test_10() {
247        let params = crate::config::endpoint::Params::builder()
248            .region("cn-north-1".to_string())
249            .use_fips(false)
250            .use_dual_stack(true)
251            .build()
252            .expect("invalid params");
253        let resolver = crate::config::endpoint::DefaultResolver::new();
254        let endpoint = resolver.resolve_endpoint(&params);
255        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront.cn-north-1.api.amazonwebservices.com.cn");
256        assert_eq!(
257            endpoint,
258            ::aws_smithy_types::endpoint::Endpoint::builder()
259                .url("https://cloudfront.cn-north-1.api.amazonwebservices.com.cn")
260                .build()
261        );
262    }
263
264    /// For region cn-north-1 with FIPS disabled and DualStack disabled
265    #[test]
266    fn test_11() {
267        let params = crate::config::endpoint::Params::builder()
268            .region("cn-north-1".to_string())
269            .use_fips(false)
270            .use_dual_stack(false)
271            .build()
272            .expect("invalid params");
273        let resolver = crate::config::endpoint::DefaultResolver::new();
274        let endpoint = resolver.resolve_endpoint(&params);
275        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront.cn-northwest-1.amazonaws.com.cn");
276        assert_eq!(
277            endpoint,
278            ::aws_smithy_types::endpoint::Endpoint::builder()
279                .url("https://cloudfront.cn-northwest-1.amazonaws.com.cn")
280                .property(
281                    "authSchemes",
282                    vec![{
283                        let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
284                        out.insert("name".to_string(), "sigv4".to_string().into());
285                        out.insert("signingName".to_string(), "cloudfront".to_string().into());
286                        out.insert("signingRegion".to_string(), "cn-northwest-1".to_string().into());
287                        out
288                    }
289                    .into()]
290                )
291                .build()
292        );
293    }
294
295    /// For region us-gov-east-1 with FIPS enabled and DualStack enabled
296    #[test]
297    fn test_12() {
298        let params = crate::config::endpoint::Params::builder()
299            .region("us-gov-east-1".to_string())
300            .use_fips(true)
301            .use_dual_stack(true)
302            .build()
303            .expect("invalid params");
304        let resolver = crate::config::endpoint::DefaultResolver::new();
305        let endpoint = resolver.resolve_endpoint(&params);
306        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront-fips.us-gov-east-1.api.aws");
307        assert_eq!(
308            endpoint,
309            ::aws_smithy_types::endpoint::Endpoint::builder()
310                .url("https://cloudfront-fips.us-gov-east-1.api.aws")
311                .build()
312        );
313    }
314
315    /// For region us-gov-east-1 with FIPS enabled and DualStack disabled
316    #[test]
317    fn test_13() {
318        let params = crate::config::endpoint::Params::builder()
319            .region("us-gov-east-1".to_string())
320            .use_fips(true)
321            .use_dual_stack(false)
322            .build()
323            .expect("invalid params");
324        let resolver = crate::config::endpoint::DefaultResolver::new();
325        let endpoint = resolver.resolve_endpoint(&params);
326        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront-fips.us-gov-east-1.amazonaws.com");
327        assert_eq!(
328            endpoint,
329            ::aws_smithy_types::endpoint::Endpoint::builder()
330                .url("https://cloudfront-fips.us-gov-east-1.amazonaws.com")
331                .build()
332        );
333    }
334
335    /// For region us-gov-east-1 with FIPS disabled and DualStack enabled
336    #[test]
337    fn test_14() {
338        let params = crate::config::endpoint::Params::builder()
339            .region("us-gov-east-1".to_string())
340            .use_fips(false)
341            .use_dual_stack(true)
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://cloudfront.us-gov-east-1.api.aws");
347        assert_eq!(
348            endpoint,
349            ::aws_smithy_types::endpoint::Endpoint::builder()
350                .url("https://cloudfront.us-gov-east-1.api.aws")
351                .build()
352        );
353    }
354
355    /// For region us-gov-east-1 with FIPS disabled and DualStack disabled
356    #[test]
357    fn test_15() {
358        let params = crate::config::endpoint::Params::builder()
359            .region("us-gov-east-1".to_string())
360            .use_fips(false)
361            .use_dual_stack(false)
362            .build()
363            .expect("invalid params");
364        let resolver = crate::config::endpoint::DefaultResolver::new();
365        let endpoint = resolver.resolve_endpoint(&params);
366        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront.us-gov-east-1.amazonaws.com");
367        assert_eq!(
368            endpoint,
369            ::aws_smithy_types::endpoint::Endpoint::builder()
370                .url("https://cloudfront.us-gov-east-1.amazonaws.com")
371                .build()
372        );
373    }
374
375    /// For region us-iso-east-1 with FIPS enabled and DualStack enabled
376    #[test]
377    fn test_16() {
378        let params = crate::config::endpoint::Params::builder()
379            .region("us-iso-east-1".to_string())
380            .use_fips(true)
381            .use_dual_stack(true)
382            .build()
383            .expect("invalid params");
384        let resolver = crate::config::endpoint::DefaultResolver::new();
385        let endpoint = resolver.resolve_endpoint(&params);
386        let error = endpoint.expect_err("expected error: FIPS and DualStack are enabled, but this partition does not support one or both [For region us-iso-east-1 with FIPS enabled and DualStack enabled]");
387        assert_eq!(
388            format!("{}", error),
389            "FIPS and DualStack are enabled, but this partition does not support one or both"
390        )
391    }
392
393    /// For region us-iso-east-1 with FIPS enabled and DualStack disabled
394    #[test]
395    fn test_17() {
396        let params = crate::config::endpoint::Params::builder()
397            .region("us-iso-east-1".to_string())
398            .use_fips(true)
399            .use_dual_stack(false)
400            .build()
401            .expect("invalid params");
402        let resolver = crate::config::endpoint::DefaultResolver::new();
403        let endpoint = resolver.resolve_endpoint(&params);
404        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront-fips.us-iso-east-1.c2s.ic.gov");
405        assert_eq!(
406            endpoint,
407            ::aws_smithy_types::endpoint::Endpoint::builder()
408                .url("https://cloudfront-fips.us-iso-east-1.c2s.ic.gov")
409                .build()
410        );
411    }
412
413    /// For region us-iso-east-1 with FIPS disabled and DualStack enabled
414    #[test]
415    fn test_18() {
416        let params = crate::config::endpoint::Params::builder()
417            .region("us-iso-east-1".to_string())
418            .use_fips(false)
419            .use_dual_stack(true)
420            .build()
421            .expect("invalid params");
422        let resolver = crate::config::endpoint::DefaultResolver::new();
423        let endpoint = resolver.resolve_endpoint(&params);
424        let error = endpoint.expect_err("expected error: DualStack is enabled but this partition does not support DualStack [For region us-iso-east-1 with FIPS disabled and DualStack enabled]");
425        assert_eq!(format!("{}", error), "DualStack is enabled but this partition does not support DualStack")
426    }
427
428    /// For region us-iso-east-1 with FIPS disabled and DualStack disabled
429    #[test]
430    fn test_19() {
431        let params = crate::config::endpoint::Params::builder()
432            .region("us-iso-east-1".to_string())
433            .use_fips(false)
434            .use_dual_stack(false)
435            .build()
436            .expect("invalid params");
437        let resolver = crate::config::endpoint::DefaultResolver::new();
438        let endpoint = resolver.resolve_endpoint(&params);
439        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront.us-iso-east-1.c2s.ic.gov");
440        assert_eq!(
441            endpoint,
442            ::aws_smithy_types::endpoint::Endpoint::builder()
443                .url("https://cloudfront.us-iso-east-1.c2s.ic.gov")
444                .build()
445        );
446    }
447
448    /// For region us-isob-east-1 with FIPS enabled and DualStack enabled
449    #[test]
450    fn test_20() {
451        let params = crate::config::endpoint::Params::builder()
452            .region("us-isob-east-1".to_string())
453            .use_fips(true)
454            .use_dual_stack(true)
455            .build()
456            .expect("invalid params");
457        let resolver = crate::config::endpoint::DefaultResolver::new();
458        let endpoint = resolver.resolve_endpoint(&params);
459        let error = endpoint.expect_err("expected error: FIPS and DualStack are enabled, but this partition does not support one or both [For region us-isob-east-1 with FIPS enabled and DualStack enabled]");
460        assert_eq!(
461            format!("{}", error),
462            "FIPS and DualStack are enabled, but this partition does not support one or both"
463        )
464    }
465
466    /// For region us-isob-east-1 with FIPS enabled and DualStack disabled
467    #[test]
468    fn test_21() {
469        let params = crate::config::endpoint::Params::builder()
470            .region("us-isob-east-1".to_string())
471            .use_fips(true)
472            .use_dual_stack(false)
473            .build()
474            .expect("invalid params");
475        let resolver = crate::config::endpoint::DefaultResolver::new();
476        let endpoint = resolver.resolve_endpoint(&params);
477        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront-fips.us-isob-east-1.sc2s.sgov.gov");
478        assert_eq!(
479            endpoint,
480            ::aws_smithy_types::endpoint::Endpoint::builder()
481                .url("https://cloudfront-fips.us-isob-east-1.sc2s.sgov.gov")
482                .build()
483        );
484    }
485
486    /// For region us-isob-east-1 with FIPS disabled and DualStack enabled
487    #[test]
488    fn test_22() {
489        let params = crate::config::endpoint::Params::builder()
490            .region("us-isob-east-1".to_string())
491            .use_fips(false)
492            .use_dual_stack(true)
493            .build()
494            .expect("invalid params");
495        let resolver = crate::config::endpoint::DefaultResolver::new();
496        let endpoint = resolver.resolve_endpoint(&params);
497        let error = endpoint.expect_err("expected error: DualStack is enabled but this partition does not support DualStack [For region us-isob-east-1 with FIPS disabled and DualStack enabled]");
498        assert_eq!(format!("{}", error), "DualStack is enabled but this partition does not support DualStack")
499    }
500
501    /// For region us-isob-east-1 with FIPS disabled and DualStack disabled
502    #[test]
503    fn test_23() {
504        let params = crate::config::endpoint::Params::builder()
505            .region("us-isob-east-1".to_string())
506            .use_fips(false)
507            .use_dual_stack(false)
508            .build()
509            .expect("invalid params");
510        let resolver = crate::config::endpoint::DefaultResolver::new();
511        let endpoint = resolver.resolve_endpoint(&params);
512        let endpoint = endpoint.expect("Expected valid endpoint: https://cloudfront.us-isob-east-1.sc2s.sgov.gov");
513        assert_eq!(
514            endpoint,
515            ::aws_smithy_types::endpoint::Endpoint::builder()
516                .url("https://cloudfront.us-isob-east-1.sc2s.sgov.gov")
517                .build()
518        );
519    }
520
521    /// For custom endpoint with region set and fips disabled and dualstack disabled
522    #[test]
523    fn test_24() {
524        let params = crate::config::endpoint::Params::builder()
525            .region("us-east-1".to_string())
526            .use_fips(false)
527            .use_dual_stack(false)
528            .endpoint("https://example.com".to_string())
529            .build()
530            .expect("invalid params");
531        let resolver = crate::config::endpoint::DefaultResolver::new();
532        let endpoint = resolver.resolve_endpoint(&params);
533        let endpoint = endpoint.expect("Expected valid endpoint: https://example.com");
534        assert_eq!(
535            endpoint,
536            ::aws_smithy_types::endpoint::Endpoint::builder().url("https://example.com").build()
537        );
538    }
539
540    /// For custom endpoint with region not set and fips disabled and dualstack disabled
541    #[test]
542    fn test_25() {
543        let params = crate::config::endpoint::Params::builder()
544            .use_fips(false)
545            .use_dual_stack(false)
546            .endpoint("https://example.com".to_string())
547            .build()
548            .expect("invalid params");
549        let resolver = crate::config::endpoint::DefaultResolver::new();
550        let endpoint = resolver.resolve_endpoint(&params);
551        let endpoint = endpoint.expect("Expected valid endpoint: https://example.com");
552        assert_eq!(
553            endpoint,
554            ::aws_smithy_types::endpoint::Endpoint::builder().url("https://example.com").build()
555        );
556    }
557
558    /// For custom endpoint with fips enabled and dualstack disabled
559    #[test]
560    fn test_26() {
561        let params = crate::config::endpoint::Params::builder()
562            .region("us-east-1".to_string())
563            .use_fips(true)
564            .use_dual_stack(false)
565            .endpoint("https://example.com".to_string())
566            .build()
567            .expect("invalid params");
568        let resolver = crate::config::endpoint::DefaultResolver::new();
569        let endpoint = resolver.resolve_endpoint(&params);
570        let error = endpoint.expect_err("expected error: Invalid Configuration: FIPS and custom endpoint are not supported [For custom endpoint with fips enabled and dualstack disabled]");
571        assert_eq!(format!("{}", error), "Invalid Configuration: FIPS and custom endpoint are not supported")
572    }
573
574    /// For custom endpoint with fips disabled and dualstack enabled
575    #[test]
576    fn test_27() {
577        let params = crate::config::endpoint::Params::builder()
578            .region("us-east-1".to_string())
579            .use_fips(false)
580            .use_dual_stack(true)
581            .endpoint("https://example.com".to_string())
582            .build()
583            .expect("invalid params");
584        let resolver = crate::config::endpoint::DefaultResolver::new();
585        let endpoint = resolver.resolve_endpoint(&params);
586        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]");
587        assert_eq!(
588            format!("{}", error),
589            "Invalid Configuration: Dualstack and custom endpoint are not supported"
590        )
591    }
592
593    /// Missing region
594    #[test]
595    fn test_28() {
596        let params = crate::config::endpoint::Params::builder().build().expect("invalid params");
597        let resolver = crate::config::endpoint::DefaultResolver::new();
598        let endpoint = resolver.resolve_endpoint(&params);
599        let error = endpoint.expect_err("expected error: Invalid Configuration: Missing Region [Missing region]");
600        assert_eq!(format!("{}", error), "Invalid Configuration: Missing Region")
601    }
602}
603
604/// Endpoint resolver trait specific to Amazon CloudFront
605pub trait ResolveEndpoint: ::std::marker::Send + ::std::marker::Sync + ::std::fmt::Debug {
606    /// Resolve an endpoint with the given parameters
607    fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a>;
608
609    /// Convert this service-specific resolver into a `SharedEndpointResolver`
610    ///
611    /// The resulting resolver will downcast `EndpointResolverParams` into `crate::config::endpoint::Params`.
612    fn into_shared_resolver(self) -> ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver
613    where
614        Self: Sized + 'static,
615    {
616        ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver::new(DowncastParams(self))
617    }
618}
619
620#[derive(Debug)]
621struct DowncastParams<T>(T);
622impl<T> ::aws_smithy_runtime_api::client::endpoint::ResolveEndpoint for DowncastParams<T>
623where
624    T: ResolveEndpoint,
625{
626    fn resolve_endpoint<'a>(
627        &'a self,
628        params: &'a ::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams,
629    ) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a> {
630        let ep = match params.get::<crate::config::endpoint::Params>() {
631            Some(params) => self.0.resolve_endpoint(params),
632            None => ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(Err("params of expected type was not present".into())),
633        };
634        ep
635    }
636}
637
638/// The default endpoint resolver
639#[derive(Debug, Default)]
640pub struct DefaultResolver {
641    partition_resolver: crate::endpoint_lib::partition::PartitionResolver,
642}
643
644impl DefaultResolver {
645    /// Create a new endpoint resolver with default settings
646    pub fn new() -> Self {
647        Self {
648            partition_resolver: crate::endpoint_lib::DEFAULT_PARTITION_RESOLVER.clone(),
649        }
650    }
651
652    fn resolve_endpoint(
653        &self,
654        params: &crate::config::endpoint::Params,
655    ) -> ::std::result::Result<::aws_smithy_types::endpoint::Endpoint, ::aws_smithy_runtime_api::box_error::BoxError> {
656        let mut diagnostic_collector = crate::endpoint_lib::diagnostic::DiagnosticCollector::new();
657        Ok(
658            crate::config::endpoint::internals::resolve_endpoint(params, &mut diagnostic_collector, &self.partition_resolver)
659                .map_err(|err| err.with_source(diagnostic_collector.take_last_error()))?,
660        )
661    }
662}
663
664impl crate::config::endpoint::ResolveEndpoint for DefaultResolver {
665    fn resolve_endpoint(&self, params: &crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture {
666        ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(self.resolve_endpoint(params))
667    }
668}
669
670#[non_exhaustive]
671#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
672/// Configuration parameters for resolving the correct endpoint
673pub struct Params {
674    /// The AWS region used to dispatch the request.
675    pub(crate) region: ::std::option::Option<::std::string::String>,
676    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
677    pub(crate) use_dual_stack: bool,
678    /// 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.
679    pub(crate) use_fips: bool,
680    /// Override the endpoint used to send this request
681    pub(crate) endpoint: ::std::option::Option<::std::string::String>,
682}
683impl Params {
684    /// Create a builder for [`Params`]
685    pub fn builder() -> crate::config::endpoint::ParamsBuilder {
686        crate::config::endpoint::ParamsBuilder::default()
687    }
688    /// The AWS region used to dispatch the request.
689    pub fn region(&self) -> ::std::option::Option<&str> {
690        self.region.as_deref()
691    }
692    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
693    pub fn use_dual_stack(&self) -> ::std::option::Option<bool> {
694        Some(self.use_dual_stack)
695    }
696    /// 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.
697    pub fn use_fips(&self) -> ::std::option::Option<bool> {
698        Some(self.use_fips)
699    }
700    /// Override the endpoint used to send this request
701    pub fn endpoint(&self) -> ::std::option::Option<&str> {
702        self.endpoint.as_deref()
703    }
704}
705
706/// Builder for [`Params`]
707#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
708pub struct ParamsBuilder {
709    region: ::std::option::Option<::std::string::String>,
710    use_dual_stack: ::std::option::Option<bool>,
711    use_fips: ::std::option::Option<bool>,
712    endpoint: ::std::option::Option<::std::string::String>,
713}
714impl ParamsBuilder {
715    /// Consume this builder, creating [`Params`].
716    pub fn build(self) -> ::std::result::Result<crate::config::endpoint::Params, crate::config::endpoint::InvalidParams> {
717        Ok(
718            #[allow(clippy::unnecessary_lazy_evaluations)]
719            crate::config::endpoint::Params {
720                region: self.region,
721                use_dual_stack: self
722                    .use_dual_stack
723                    .or_else(|| Some(false))
724                    .ok_or_else(|| crate::config::endpoint::InvalidParams::missing("use_dual_stack"))?,
725                use_fips: self
726                    .use_fips
727                    .or_else(|| Some(false))
728                    .ok_or_else(|| crate::config::endpoint::InvalidParams::missing("use_fips"))?,
729                endpoint: self.endpoint,
730            },
731        )
732    }
733    /// Sets the value for region
734    ///
735    /// The AWS region used to dispatch the request.
736    pub fn region(mut self, value: impl Into<::std::string::String>) -> Self {
737        self.region = Some(value.into());
738        self
739    }
740
741    /// Sets the value for region
742    ///
743    /// The AWS region used to dispatch the request.
744    pub fn set_region(mut self, param: Option<::std::string::String>) -> Self {
745        self.region = param;
746        self
747    }
748    /// Sets the value for use_dual_stack
749    ///
750    /// When unset, this parameter has a default value of `false`.
751    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
752    pub fn use_dual_stack(mut self, value: impl Into<bool>) -> Self {
753        self.use_dual_stack = Some(value.into());
754        self
755    }
756
757    /// Sets the value for use_dual_stack
758    ///
759    /// When unset, this parameter has a default value of `false`.
760    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
761    pub fn set_use_dual_stack(mut self, param: Option<bool>) -> Self {
762        self.use_dual_stack = param;
763        self
764    }
765    /// Sets the value for use_fips
766    ///
767    /// When unset, this parameter has a default value of `false`.
768    /// 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.
769    pub fn use_fips(mut self, value: impl Into<bool>) -> Self {
770        self.use_fips = Some(value.into());
771        self
772    }
773
774    /// Sets the value for use_fips
775    ///
776    /// When unset, this parameter has a default value of `false`.
777    /// 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.
778    pub fn set_use_fips(mut self, param: Option<bool>) -> Self {
779        self.use_fips = param;
780        self
781    }
782    /// Sets the value for endpoint
783    ///
784    /// Override the endpoint used to send this request
785    pub fn endpoint(mut self, value: impl Into<::std::string::String>) -> Self {
786        self.endpoint = Some(value.into());
787        self
788    }
789
790    /// Sets the value for endpoint
791    ///
792    /// Override the endpoint used to send this request
793    pub fn set_endpoint(mut self, param: Option<::std::string::String>) -> Self {
794        self.endpoint = param;
795        self
796    }
797}
798
799/// An error that occurred during endpoint resolution
800#[derive(Debug)]
801pub struct InvalidParams {
802    field: std::borrow::Cow<'static, str>,
803}
804
805impl InvalidParams {
806    #[allow(dead_code)]
807    fn missing(field: &'static str) -> Self {
808        Self { field: field.into() }
809    }
810}
811
812impl std::fmt::Display for InvalidParams {
813    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
814        write!(f, "a required field was missing: `{}`", self.field)
815    }
816}
817
818impl std::error::Error for InvalidParams {}
819
820mod internals;