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#[cfg(test)]
7mod test {
8
9 #[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(¶ms);
20 let endpoint = endpoint.expect("Expected valid endpoint: https://support.us-east-1.amazonaws.com");
21 assert_eq!(
22 endpoint,
23 ::aws_smithy_types::endpoint::Endpoint::builder()
24 .url("https://support.us-east-1.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(), "support".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 #[test]
42 fn test_2() {
43 let params = crate::config::endpoint::Params::builder()
44 .region("us-east-1".to_string())
45 .use_fips(true)
46 .use_dual_stack(true)
47 .build()
48 .expect("invalid params");
49 let resolver = crate::config::endpoint::DefaultResolver::new();
50 let endpoint = resolver.resolve_endpoint(¶ms);
51 let endpoint = endpoint.expect("Expected valid endpoint: https://support-fips.us-east-1.api.aws");
52 assert_eq!(
53 endpoint,
54 ::aws_smithy_types::endpoint::Endpoint::builder()
55 .url("https://support-fips.us-east-1.api.aws")
56 .build()
57 );
58 }
59
60 #[test]
62 fn test_3() {
63 let params = crate::config::endpoint::Params::builder()
64 .region("us-east-1".to_string())
65 .use_fips(true)
66 .use_dual_stack(false)
67 .build()
68 .expect("invalid params");
69 let resolver = crate::config::endpoint::DefaultResolver::new();
70 let endpoint = resolver.resolve_endpoint(¶ms);
71 let endpoint = endpoint.expect("Expected valid endpoint: https://support-fips.us-east-1.amazonaws.com");
72 assert_eq!(
73 endpoint,
74 ::aws_smithy_types::endpoint::Endpoint::builder()
75 .url("https://support-fips.us-east-1.amazonaws.com")
76 .build()
77 );
78 }
79
80 #[test]
82 fn test_4() {
83 let params = crate::config::endpoint::Params::builder()
84 .region("us-east-1".to_string())
85 .use_fips(false)
86 .use_dual_stack(true)
87 .build()
88 .expect("invalid params");
89 let resolver = crate::config::endpoint::DefaultResolver::new();
90 let endpoint = resolver.resolve_endpoint(¶ms);
91 let endpoint = endpoint.expect("Expected valid endpoint: https://support.us-east-1.api.aws");
92 assert_eq!(
93 endpoint,
94 ::aws_smithy_types::endpoint::Endpoint::builder()
95 .url("https://support.us-east-1.api.aws")
96 .build()
97 );
98 }
99
100 #[test]
102 fn test_5() {
103 let params = crate::config::endpoint::Params::builder()
104 .region("us-east-1".to_string())
105 .use_fips(false)
106 .use_dual_stack(false)
107 .build()
108 .expect("invalid params");
109 let resolver = crate::config::endpoint::DefaultResolver::new();
110 let endpoint = resolver.resolve_endpoint(¶ms);
111 let endpoint = endpoint.expect("Expected valid endpoint: https://support.us-east-1.amazonaws.com");
112 assert_eq!(
113 endpoint,
114 ::aws_smithy_types::endpoint::Endpoint::builder()
115 .url("https://support.us-east-1.amazonaws.com")
116 .property(
117 "authSchemes",
118 vec![{
119 let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
120 out.insert("name".to_string(), "sigv4".to_string().into());
121 out.insert("signingName".to_string(), "support".to_string().into());
122 out.insert("signingRegion".to_string(), "us-east-1".to_string().into());
123 out
124 }
125 .into()]
126 )
127 .build()
128 );
129 }
130
131 #[test]
133 fn test_6() {
134 let params = crate::config::endpoint::Params::builder()
135 .region("aws-cn-global".to_string())
136 .use_fips(false)
137 .use_dual_stack(false)
138 .build()
139 .expect("invalid params");
140 let resolver = crate::config::endpoint::DefaultResolver::new();
141 let endpoint = resolver.resolve_endpoint(¶ms);
142 let endpoint = endpoint.expect("Expected valid endpoint: https://support.cn-north-1.amazonaws.com.cn");
143 assert_eq!(
144 endpoint,
145 ::aws_smithy_types::endpoint::Endpoint::builder()
146 .url("https://support.cn-north-1.amazonaws.com.cn")
147 .property(
148 "authSchemes",
149 vec![{
150 let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
151 out.insert("name".to_string(), "sigv4".to_string().into());
152 out.insert("signingName".to_string(), "support".to_string().into());
153 out.insert("signingRegion".to_string(), "cn-north-1".to_string().into());
154 out
155 }
156 .into()]
157 )
158 .build()
159 );
160 }
161
162 #[test]
164 fn test_7() {
165 let params = crate::config::endpoint::Params::builder()
166 .region("cn-north-1".to_string())
167 .use_fips(true)
168 .use_dual_stack(true)
169 .build()
170 .expect("invalid params");
171 let resolver = crate::config::endpoint::DefaultResolver::new();
172 let endpoint = resolver.resolve_endpoint(¶ms);
173 let endpoint = endpoint.expect("Expected valid endpoint: https://support-fips.cn-north-1.api.amazonwebservices.com.cn");
174 assert_eq!(
175 endpoint,
176 ::aws_smithy_types::endpoint::Endpoint::builder()
177 .url("https://support-fips.cn-north-1.api.amazonwebservices.com.cn")
178 .build()
179 );
180 }
181
182 #[test]
184 fn test_8() {
185 let params = crate::config::endpoint::Params::builder()
186 .region("cn-north-1".to_string())
187 .use_fips(true)
188 .use_dual_stack(false)
189 .build()
190 .expect("invalid params");
191 let resolver = crate::config::endpoint::DefaultResolver::new();
192 let endpoint = resolver.resolve_endpoint(¶ms);
193 let endpoint = endpoint.expect("Expected valid endpoint: https://support-fips.cn-north-1.amazonaws.com.cn");
194 assert_eq!(
195 endpoint,
196 ::aws_smithy_types::endpoint::Endpoint::builder()
197 .url("https://support-fips.cn-north-1.amazonaws.com.cn")
198 .build()
199 );
200 }
201
202 #[test]
204 fn test_9() {
205 let params = crate::config::endpoint::Params::builder()
206 .region("cn-north-1".to_string())
207 .use_fips(false)
208 .use_dual_stack(true)
209 .build()
210 .expect("invalid params");
211 let resolver = crate::config::endpoint::DefaultResolver::new();
212 let endpoint = resolver.resolve_endpoint(¶ms);
213 let endpoint = endpoint.expect("Expected valid endpoint: https://support.cn-north-1.api.amazonwebservices.com.cn");
214 assert_eq!(
215 endpoint,
216 ::aws_smithy_types::endpoint::Endpoint::builder()
217 .url("https://support.cn-north-1.api.amazonwebservices.com.cn")
218 .build()
219 );
220 }
221
222 #[test]
224 fn test_10() {
225 let params = crate::config::endpoint::Params::builder()
226 .region("cn-north-1".to_string())
227 .use_fips(false)
228 .use_dual_stack(false)
229 .build()
230 .expect("invalid params");
231 let resolver = crate::config::endpoint::DefaultResolver::new();
232 let endpoint = resolver.resolve_endpoint(¶ms);
233 let endpoint = endpoint.expect("Expected valid endpoint: https://support.cn-north-1.amazonaws.com.cn");
234 assert_eq!(
235 endpoint,
236 ::aws_smithy_types::endpoint::Endpoint::builder()
237 .url("https://support.cn-north-1.amazonaws.com.cn")
238 .property(
239 "authSchemes",
240 vec![{
241 let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
242 out.insert("name".to_string(), "sigv4".to_string().into());
243 out.insert("signingName".to_string(), "support".to_string().into());
244 out.insert("signingRegion".to_string(), "cn-north-1".to_string().into());
245 out
246 }
247 .into()]
248 )
249 .build()
250 );
251 }
252
253 #[test]
255 fn test_11() {
256 let params = crate::config::endpoint::Params::builder()
257 .region("aws-us-gov-global".to_string())
258 .use_fips(false)
259 .use_dual_stack(false)
260 .build()
261 .expect("invalid params");
262 let resolver = crate::config::endpoint::DefaultResolver::new();
263 let endpoint = resolver.resolve_endpoint(¶ms);
264 let endpoint = endpoint.expect("Expected valid endpoint: https://support.us-gov-west-1.amazonaws.com");
265 assert_eq!(
266 endpoint,
267 ::aws_smithy_types::endpoint::Endpoint::builder()
268 .url("https://support.us-gov-west-1.amazonaws.com")
269 .property(
270 "authSchemes",
271 vec![{
272 let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
273 out.insert("name".to_string(), "sigv4".to_string().into());
274 out.insert("signingName".to_string(), "support".to_string().into());
275 out.insert("signingRegion".to_string(), "us-gov-west-1".to_string().into());
276 out
277 }
278 .into()]
279 )
280 .build()
281 );
282 }
283
284 #[test]
286 fn test_12() {
287 let params = crate::config::endpoint::Params::builder()
288 .region("aws-us-gov-global".to_string())
289 .use_fips(true)
290 .use_dual_stack(false)
291 .build()
292 .expect("invalid params");
293 let resolver = crate::config::endpoint::DefaultResolver::new();
294 let endpoint = resolver.resolve_endpoint(¶ms);
295 let endpoint = endpoint.expect("Expected valid endpoint: https://support.us-gov-west-1.amazonaws.com");
296 assert_eq!(
297 endpoint,
298 ::aws_smithy_types::endpoint::Endpoint::builder()
299 .url("https://support.us-gov-west-1.amazonaws.com")
300 .property(
301 "authSchemes",
302 vec![{
303 let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
304 out.insert("name".to_string(), "sigv4".to_string().into());
305 out.insert("signingName".to_string(), "support".to_string().into());
306 out.insert("signingRegion".to_string(), "us-gov-west-1".to_string().into());
307 out
308 }
309 .into()]
310 )
311 .build()
312 );
313 }
314
315 #[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(true)
322 .build()
323 .expect("invalid params");
324 let resolver = crate::config::endpoint::DefaultResolver::new();
325 let endpoint = resolver.resolve_endpoint(¶ms);
326 let endpoint = endpoint.expect("Expected valid endpoint: https://support-fips.us-gov-east-1.api.aws");
327 assert_eq!(
328 endpoint,
329 ::aws_smithy_types::endpoint::Endpoint::builder()
330 .url("https://support-fips.us-gov-east-1.api.aws")
331 .build()
332 );
333 }
334
335 #[test]
337 fn test_14() {
338 let params = crate::config::endpoint::Params::builder()
339 .region("us-gov-east-1".to_string())
340 .use_fips(true)
341 .use_dual_stack(false)
342 .build()
343 .expect("invalid params");
344 let resolver = crate::config::endpoint::DefaultResolver::new();
345 let endpoint = resolver.resolve_endpoint(¶ms);
346 let endpoint = endpoint.expect("Expected valid endpoint: https://support.us-gov-west-1.amazonaws.com");
347 assert_eq!(
348 endpoint,
349 ::aws_smithy_types::endpoint::Endpoint::builder()
350 .url("https://support.us-gov-west-1.amazonaws.com")
351 .property(
352 "authSchemes",
353 vec![{
354 let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
355 out.insert("name".to_string(), "sigv4".to_string().into());
356 out.insert("signingName".to_string(), "support".to_string().into());
357 out.insert("signingRegion".to_string(), "us-gov-west-1".to_string().into());
358 out
359 }
360 .into()]
361 )
362 .build()
363 );
364 }
365
366 #[test]
368 fn test_15() {
369 let params = crate::config::endpoint::Params::builder()
370 .region("us-gov-east-1".to_string())
371 .use_fips(false)
372 .use_dual_stack(true)
373 .build()
374 .expect("invalid params");
375 let resolver = crate::config::endpoint::DefaultResolver::new();
376 let endpoint = resolver.resolve_endpoint(¶ms);
377 let endpoint = endpoint.expect("Expected valid endpoint: https://support.us-gov-east-1.api.aws");
378 assert_eq!(
379 endpoint,
380 ::aws_smithy_types::endpoint::Endpoint::builder()
381 .url("https://support.us-gov-east-1.api.aws")
382 .build()
383 );
384 }
385
386 #[test]
388 fn test_16() {
389 let params = crate::config::endpoint::Params::builder()
390 .region("us-gov-east-1".to_string())
391 .use_fips(false)
392 .use_dual_stack(false)
393 .build()
394 .expect("invalid params");
395 let resolver = crate::config::endpoint::DefaultResolver::new();
396 let endpoint = resolver.resolve_endpoint(¶ms);
397 let endpoint = endpoint.expect("Expected valid endpoint: https://support.us-gov-west-1.amazonaws.com");
398 assert_eq!(
399 endpoint,
400 ::aws_smithy_types::endpoint::Endpoint::builder()
401 .url("https://support.us-gov-west-1.amazonaws.com")
402 .property(
403 "authSchemes",
404 vec![{
405 let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
406 out.insert("name".to_string(), "sigv4".to_string().into());
407 out.insert("signingName".to_string(), "support".to_string().into());
408 out.insert("signingRegion".to_string(), "us-gov-west-1".to_string().into());
409 out
410 }
411 .into()]
412 )
413 .build()
414 );
415 }
416
417 #[test]
419 fn test_17() {
420 let params = crate::config::endpoint::Params::builder()
421 .region("aws-iso-global".to_string())
422 .use_fips(false)
423 .use_dual_stack(false)
424 .build()
425 .expect("invalid params");
426 let resolver = crate::config::endpoint::DefaultResolver::new();
427 let endpoint = resolver.resolve_endpoint(¶ms);
428 let endpoint = endpoint.expect("Expected valid endpoint: https://support.us-iso-east-1.c2s.ic.gov");
429 assert_eq!(
430 endpoint,
431 ::aws_smithy_types::endpoint::Endpoint::builder()
432 .url("https://support.us-iso-east-1.c2s.ic.gov")
433 .property(
434 "authSchemes",
435 vec![{
436 let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
437 out.insert("name".to_string(), "sigv4".to_string().into());
438 out.insert("signingName".to_string(), "support".to_string().into());
439 out.insert("signingRegion".to_string(), "us-iso-east-1".to_string().into());
440 out
441 }
442 .into()]
443 )
444 .build()
445 );
446 }
447
448 #[test]
450 fn test_18() {
451 let params = crate::config::endpoint::Params::builder()
452 .region("us-iso-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(¶ms);
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-iso-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 #[test]
468 fn test_19() {
469 let params = crate::config::endpoint::Params::builder()
470 .region("us-iso-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(¶ms);
477 let endpoint = endpoint.expect("Expected valid endpoint: https://support-fips.us-iso-east-1.c2s.ic.gov");
478 assert_eq!(
479 endpoint,
480 ::aws_smithy_types::endpoint::Endpoint::builder()
481 .url("https://support-fips.us-iso-east-1.c2s.ic.gov")
482 .build()
483 );
484 }
485
486 #[test]
488 fn test_20() {
489 let params = crate::config::endpoint::Params::builder()
490 .region("us-iso-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(¶ms);
497 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]");
498 assert_eq!(format!("{}", error), "DualStack is enabled but this partition does not support DualStack")
499 }
500
501 #[test]
503 fn test_21() {
504 let params = crate::config::endpoint::Params::builder()
505 .region("us-iso-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(¶ms);
512 let endpoint = endpoint.expect("Expected valid endpoint: https://support.us-iso-east-1.c2s.ic.gov");
513 assert_eq!(
514 endpoint,
515 ::aws_smithy_types::endpoint::Endpoint::builder()
516 .url("https://support.us-iso-east-1.c2s.ic.gov")
517 .property(
518 "authSchemes",
519 vec![{
520 let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
521 out.insert("name".to_string(), "sigv4".to_string().into());
522 out.insert("signingName".to_string(), "support".to_string().into());
523 out.insert("signingRegion".to_string(), "us-iso-east-1".to_string().into());
524 out
525 }
526 .into()]
527 )
528 .build()
529 );
530 }
531
532 #[test]
534 fn test_22() {
535 let params = crate::config::endpoint::Params::builder()
536 .region("aws-iso-b-global".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://support.us-isob-east-1.sc2s.sgov.gov");
544 assert_eq!(
545 endpoint,
546 ::aws_smithy_types::endpoint::Endpoint::builder()
547 .url("https://support.us-isob-east-1.sc2s.sgov.gov")
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("signingName".to_string(), "support".to_string().into());
554 out.insert("signingRegion".to_string(), "us-isob-east-1".to_string().into());
555 out
556 }
557 .into()]
558 )
559 .build()
560 );
561 }
562
563 #[test]
565 fn test_23() {
566 let params = crate::config::endpoint::Params::builder()
567 .region("us-isob-east-1".to_string())
568 .use_fips(true)
569 .use_dual_stack(true)
570 .build()
571 .expect("invalid params");
572 let resolver = crate::config::endpoint::DefaultResolver::new();
573 let endpoint = resolver.resolve_endpoint(¶ms);
574 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]");
575 assert_eq!(
576 format!("{}", error),
577 "FIPS and DualStack are enabled, but this partition does not support one or both"
578 )
579 }
580
581 #[test]
583 fn test_24() {
584 let params = crate::config::endpoint::Params::builder()
585 .region("us-isob-east-1".to_string())
586 .use_fips(true)
587 .use_dual_stack(false)
588 .build()
589 .expect("invalid params");
590 let resolver = crate::config::endpoint::DefaultResolver::new();
591 let endpoint = resolver.resolve_endpoint(¶ms);
592 let endpoint = endpoint.expect("Expected valid endpoint: https://support-fips.us-isob-east-1.sc2s.sgov.gov");
593 assert_eq!(
594 endpoint,
595 ::aws_smithy_types::endpoint::Endpoint::builder()
596 .url("https://support-fips.us-isob-east-1.sc2s.sgov.gov")
597 .build()
598 );
599 }
600
601 #[test]
603 fn test_25() {
604 let params = crate::config::endpoint::Params::builder()
605 .region("us-isob-east-1".to_string())
606 .use_fips(false)
607 .use_dual_stack(true)
608 .build()
609 .expect("invalid params");
610 let resolver = crate::config::endpoint::DefaultResolver::new();
611 let endpoint = resolver.resolve_endpoint(¶ms);
612 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]");
613 assert_eq!(format!("{}", error), "DualStack is enabled but this partition does not support DualStack")
614 }
615
616 #[test]
618 fn test_26() {
619 let params = crate::config::endpoint::Params::builder()
620 .region("us-isob-east-1".to_string())
621 .use_fips(false)
622 .use_dual_stack(false)
623 .build()
624 .expect("invalid params");
625 let resolver = crate::config::endpoint::DefaultResolver::new();
626 let endpoint = resolver.resolve_endpoint(¶ms);
627 let endpoint = endpoint.expect("Expected valid endpoint: https://support.us-isob-east-1.sc2s.sgov.gov");
628 assert_eq!(
629 endpoint,
630 ::aws_smithy_types::endpoint::Endpoint::builder()
631 .url("https://support.us-isob-east-1.sc2s.sgov.gov")
632 .property(
633 "authSchemes",
634 vec![{
635 let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
636 out.insert("name".to_string(), "sigv4".to_string().into());
637 out.insert("signingName".to_string(), "support".to_string().into());
638 out.insert("signingRegion".to_string(), "us-isob-east-1".to_string().into());
639 out
640 }
641 .into()]
642 )
643 .build()
644 );
645 }
646
647 #[test]
649 fn test_27() {
650 let params = crate::config::endpoint::Params::builder()
651 .region("us-east-1".to_string())
652 .use_fips(false)
653 .use_dual_stack(false)
654 .endpoint("https://example.com".to_string())
655 .build()
656 .expect("invalid params");
657 let resolver = crate::config::endpoint::DefaultResolver::new();
658 let endpoint = resolver.resolve_endpoint(¶ms);
659 let endpoint = endpoint.expect("Expected valid endpoint: https://example.com");
660 assert_eq!(
661 endpoint,
662 ::aws_smithy_types::endpoint::Endpoint::builder().url("https://example.com").build()
663 );
664 }
665
666 #[test]
668 fn test_28() {
669 let params = crate::config::endpoint::Params::builder()
670 .use_fips(false)
671 .use_dual_stack(false)
672 .endpoint("https://example.com".to_string())
673 .build()
674 .expect("invalid params");
675 let resolver = crate::config::endpoint::DefaultResolver::new();
676 let endpoint = resolver.resolve_endpoint(¶ms);
677 let endpoint = endpoint.expect("Expected valid endpoint: https://example.com");
678 assert_eq!(
679 endpoint,
680 ::aws_smithy_types::endpoint::Endpoint::builder().url("https://example.com").build()
681 );
682 }
683
684 #[test]
686 fn test_29() {
687 let params = crate::config::endpoint::Params::builder()
688 .region("us-east-1".to_string())
689 .use_fips(true)
690 .use_dual_stack(false)
691 .endpoint("https://example.com".to_string())
692 .build()
693 .expect("invalid params");
694 let resolver = crate::config::endpoint::DefaultResolver::new();
695 let endpoint = resolver.resolve_endpoint(¶ms);
696 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]");
697 assert_eq!(format!("{}", error), "Invalid Configuration: FIPS and custom endpoint are not supported")
698 }
699
700 #[test]
702 fn test_30() {
703 let params = crate::config::endpoint::Params::builder()
704 .region("us-east-1".to_string())
705 .use_fips(false)
706 .use_dual_stack(true)
707 .endpoint("https://example.com".to_string())
708 .build()
709 .expect("invalid params");
710 let resolver = crate::config::endpoint::DefaultResolver::new();
711 let endpoint = resolver.resolve_endpoint(¶ms);
712 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]");
713 assert_eq!(
714 format!("{}", error),
715 "Invalid Configuration: Dualstack and custom endpoint are not supported"
716 )
717 }
718
719 #[test]
721 fn test_31() {
722 let params = crate::config::endpoint::Params::builder().build().expect("invalid params");
723 let resolver = crate::config::endpoint::DefaultResolver::new();
724 let endpoint = resolver.resolve_endpoint(¶ms);
725 let error = endpoint.expect_err("expected error: Invalid Configuration: Missing Region [Missing region]");
726 assert_eq!(format!("{}", error), "Invalid Configuration: Missing Region")
727 }
728}
729
730pub trait ResolveEndpoint: ::std::marker::Send + ::std::marker::Sync + ::std::fmt::Debug {
732 fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a>;
734
735 fn into_shared_resolver(self) -> ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver
739 where
740 Self: Sized + 'static,
741 {
742 ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver::new(DowncastParams(self))
743 }
744}
745
746#[derive(Debug)]
747struct DowncastParams<T>(T);
748impl<T> ::aws_smithy_runtime_api::client::endpoint::ResolveEndpoint for DowncastParams<T>
749where
750 T: ResolveEndpoint,
751{
752 fn resolve_endpoint<'a>(
753 &'a self,
754 params: &'a ::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams,
755 ) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a> {
756 let ep = match params.get::<crate::config::endpoint::Params>() {
757 Some(params) => self.0.resolve_endpoint(params),
758 None => ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(Err("params of expected type was not present".into())),
759 };
760 ep
761 }
762}
763
764#[derive(Debug, Default)]
766pub struct DefaultResolver {
767 partition_resolver: crate::endpoint_lib::partition::PartitionResolver,
768}
769
770impl DefaultResolver {
771 pub fn new() -> Self {
773 Self {
774 partition_resolver: crate::endpoint_lib::DEFAULT_PARTITION_RESOLVER.clone(),
775 }
776 }
777
778 fn resolve_endpoint(
779 &self,
780 params: &crate::config::endpoint::Params,
781 ) -> ::std::result::Result<::aws_smithy_types::endpoint::Endpoint, ::aws_smithy_runtime_api::box_error::BoxError> {
782 let mut diagnostic_collector = crate::endpoint_lib::diagnostic::DiagnosticCollector::new();
783 Ok(
784 crate::config::endpoint::internals::resolve_endpoint(params, &mut diagnostic_collector, &self.partition_resolver)
785 .map_err(|err| err.with_source(diagnostic_collector.take_last_error()))?,
786 )
787 }
788}
789
790impl crate::config::endpoint::ResolveEndpoint for DefaultResolver {
791 fn resolve_endpoint(&self, params: &crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture {
792 ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(self.resolve_endpoint(params))
793 }
794}
795
796#[non_exhaustive]
797#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
798pub struct Params {
800 pub(crate) region: ::std::option::Option<::std::string::String>,
802 pub(crate) use_dual_stack: bool,
804 pub(crate) use_fips: bool,
806 pub(crate) endpoint: ::std::option::Option<::std::string::String>,
808}
809impl Params {
810 pub fn builder() -> crate::config::endpoint::ParamsBuilder {
812 crate::config::endpoint::ParamsBuilder::default()
813 }
814 pub fn region(&self) -> ::std::option::Option<&str> {
816 self.region.as_deref()
817 }
818 pub fn use_dual_stack(&self) -> ::std::option::Option<bool> {
820 Some(self.use_dual_stack)
821 }
822 pub fn use_fips(&self) -> ::std::option::Option<bool> {
824 Some(self.use_fips)
825 }
826 pub fn endpoint(&self) -> ::std::option::Option<&str> {
828 self.endpoint.as_deref()
829 }
830}
831
832#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
834pub struct ParamsBuilder {
835 region: ::std::option::Option<::std::string::String>,
836 use_dual_stack: ::std::option::Option<bool>,
837 use_fips: ::std::option::Option<bool>,
838 endpoint: ::std::option::Option<::std::string::String>,
839}
840impl ParamsBuilder {
841 pub fn build(self) -> ::std::result::Result<crate::config::endpoint::Params, crate::config::endpoint::InvalidParams> {
843 Ok(
844 #[allow(clippy::unnecessary_lazy_evaluations)]
845 crate::config::endpoint::Params {
846 region: self.region,
847 use_dual_stack: self
848 .use_dual_stack
849 .or_else(|| Some(false))
850 .ok_or_else(|| crate::config::endpoint::InvalidParams::missing("use_dual_stack"))?,
851 use_fips: self
852 .use_fips
853 .or_else(|| Some(false))
854 .ok_or_else(|| crate::config::endpoint::InvalidParams::missing("use_fips"))?,
855 endpoint: self.endpoint,
856 },
857 )
858 }
859 pub fn region(mut self, value: impl Into<::std::string::String>) -> Self {
863 self.region = Some(value.into());
864 self
865 }
866
867 pub fn set_region(mut self, param: Option<::std::string::String>) -> Self {
871 self.region = param;
872 self
873 }
874 pub fn use_dual_stack(mut self, value: impl Into<bool>) -> Self {
879 self.use_dual_stack = Some(value.into());
880 self
881 }
882
883 pub fn set_use_dual_stack(mut self, param: Option<bool>) -> Self {
888 self.use_dual_stack = param;
889 self
890 }
891 pub fn use_fips(mut self, value: impl Into<bool>) -> Self {
896 self.use_fips = Some(value.into());
897 self
898 }
899
900 pub fn set_use_fips(mut self, param: Option<bool>) -> Self {
905 self.use_fips = param;
906 self
907 }
908 pub fn endpoint(mut self, value: impl Into<::std::string::String>) -> Self {
912 self.endpoint = Some(value.into());
913 self
914 }
915
916 pub fn set_endpoint(mut self, param: Option<::std::string::String>) -> Self {
920 self.endpoint = param;
921 self
922 }
923}
924
925#[derive(Debug)]
927pub struct InvalidParams {
928 field: std::borrow::Cow<'static, str>,
929}
930
931impl InvalidParams {
932 #[allow(dead_code)]
933 fn missing(field: &'static str) -> Self {
934 Self { field: field.into() }
935 }
936}
937
938impl std::fmt::Display for InvalidParams {
939 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
940 write!(f, "a required field was missing: `{}`", self.field)
941 }
942}
943
944impl std::error::Error for InvalidParams {}
945
946mod internals;