1pub 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#[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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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 #[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(¶ms);
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
753pub trait ResolveEndpoint: ::std::marker::Send + ::std::marker::Sync + ::std::fmt::Debug {
755 fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a>;
757
758 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#[derive(Debug, Default)]
789pub struct DefaultResolver {
790 partition_resolver: crate::endpoint_lib::partition::PartitionResolver,
791}
792
793impl DefaultResolver {
794 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)]
821pub struct Params {
823 pub(crate) use_dual_stack: bool,
825 pub(crate) use_fips: bool,
827 pub(crate) endpoint: ::std::option::Option<::std::string::String>,
829 pub(crate) region: ::std::option::Option<::std::string::String>,
831}
832impl Params {
833 pub fn builder() -> crate::config::endpoint::ParamsBuilder {
835 crate::config::endpoint::ParamsBuilder::default()
836 }
837 pub fn use_dual_stack(&self) -> ::std::option::Option<bool> {
839 Some(self.use_dual_stack)
840 }
841 pub fn use_fips(&self) -> ::std::option::Option<bool> {
843 Some(self.use_fips)
844 }
845 pub fn endpoint(&self) -> ::std::option::Option<&str> {
847 self.endpoint.as_deref()
848 }
849 pub fn region(&self) -> ::std::option::Option<&str> {
851 self.region.as_deref()
852 }
853}
854
855#[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 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 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 pub fn set_use_dual_stack(mut self, param: Option<bool>) -> Self {
908 self.use_dual_stack = param;
909 self
910 }
911 pub fn use_fips(mut self, value: impl Into<bool>) -> Self {
916 self.use_fips = Some(value.into());
917 self
918 }
919
920 pub fn set_use_fips(mut self, param: Option<bool>) -> Self {
925 self.use_fips = param;
926 self
927 }
928 pub fn endpoint(mut self, value: impl Into<::std::string::String>) -> Self {
932 self.endpoint = Some(value.into());
933 self
934 }
935
936 pub fn set_endpoint(mut self, param: Option<::std::string::String>) -> Self {
940 self.endpoint = param;
941 self
942 }
943 pub fn region(mut self, value: impl Into<::std::string::String>) -> Self {
947 self.region = Some(value.into());
948 self
949 }
950
951 pub fn set_region(mut self, param: Option<::std::string::String>) -> Self {
955 self.region = param;
956 self
957 }
958}
959
960#[derive(Debug)]
962pub struct InvalidParams {
963 field: std::borrow::Cow<'static, str>,
964 kind: InvalidParamsErrorKind,
965}
966
967#[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;