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 .region("ap-east-1".to_string())
37 .use_fips(false)
38 .use_dual_stack(false)
39 .build()
40 .expect("invalid params");
41 let resolver = crate::config::endpoint::DefaultResolver::new();
42 let endpoint = resolver.resolve_endpoint(¶ms);
43 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.ap-east-1.amazonaws.com");
44 assert_eq!(
45 endpoint,
46 ::aws_smithy_types::endpoint::Endpoint::builder()
47 .url("https://memory-db.ap-east-1.amazonaws.com")
48 .build()
49 );
50 }
51
52 #[test]
54 fn test_2() {
55 let params = crate::config::endpoint::Params::builder()
56 .region("ap-northeast-1".to_string())
57 .use_fips(false)
58 .use_dual_stack(false)
59 .build()
60 .expect("invalid params");
61 let resolver = crate::config::endpoint::DefaultResolver::new();
62 let endpoint = resolver.resolve_endpoint(¶ms);
63 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.ap-northeast-1.amazonaws.com");
64 assert_eq!(
65 endpoint,
66 ::aws_smithy_types::endpoint::Endpoint::builder()
67 .url("https://memory-db.ap-northeast-1.amazonaws.com")
68 .build()
69 );
70 }
71
72 #[test]
74 fn test_3() {
75 let params = crate::config::endpoint::Params::builder()
76 .region("ap-northeast-2".to_string())
77 .use_fips(false)
78 .use_dual_stack(false)
79 .build()
80 .expect("invalid params");
81 let resolver = crate::config::endpoint::DefaultResolver::new();
82 let endpoint = resolver.resolve_endpoint(¶ms);
83 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.ap-northeast-2.amazonaws.com");
84 assert_eq!(
85 endpoint,
86 ::aws_smithy_types::endpoint::Endpoint::builder()
87 .url("https://memory-db.ap-northeast-2.amazonaws.com")
88 .build()
89 );
90 }
91
92 #[test]
94 fn test_4() {
95 let params = crate::config::endpoint::Params::builder()
96 .region("ap-south-1".to_string())
97 .use_fips(false)
98 .use_dual_stack(false)
99 .build()
100 .expect("invalid params");
101 let resolver = crate::config::endpoint::DefaultResolver::new();
102 let endpoint = resolver.resolve_endpoint(¶ms);
103 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.ap-south-1.amazonaws.com");
104 assert_eq!(
105 endpoint,
106 ::aws_smithy_types::endpoint::Endpoint::builder()
107 .url("https://memory-db.ap-south-1.amazonaws.com")
108 .build()
109 );
110 }
111
112 #[test]
114 fn test_5() {
115 let params = crate::config::endpoint::Params::builder()
116 .region("ap-southeast-1".to_string())
117 .use_fips(false)
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://memory-db.ap-southeast-1.amazonaws.com");
124 assert_eq!(
125 endpoint,
126 ::aws_smithy_types::endpoint::Endpoint::builder()
127 .url("https://memory-db.ap-southeast-1.amazonaws.com")
128 .build()
129 );
130 }
131
132 #[test]
134 fn test_6() {
135 let params = crate::config::endpoint::Params::builder()
136 .region("ap-southeast-2".to_string())
137 .use_fips(false)
138 .use_dual_stack(false)
139 .build()
140 .expect("invalid params");
141 let resolver = crate::config::endpoint::DefaultResolver::new();
142 let endpoint = resolver.resolve_endpoint(¶ms);
143 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.ap-southeast-2.amazonaws.com");
144 assert_eq!(
145 endpoint,
146 ::aws_smithy_types::endpoint::Endpoint::builder()
147 .url("https://memory-db.ap-southeast-2.amazonaws.com")
148 .build()
149 );
150 }
151
152 #[test]
154 fn test_7() {
155 let params = crate::config::endpoint::Params::builder()
156 .region("ca-central-1".to_string())
157 .use_fips(false)
158 .use_dual_stack(false)
159 .build()
160 .expect("invalid params");
161 let resolver = crate::config::endpoint::DefaultResolver::new();
162 let endpoint = resolver.resolve_endpoint(¶ms);
163 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.ca-central-1.amazonaws.com");
164 assert_eq!(
165 endpoint,
166 ::aws_smithy_types::endpoint::Endpoint::builder()
167 .url("https://memory-db.ca-central-1.amazonaws.com")
168 .build()
169 );
170 }
171
172 #[test]
174 fn test_8() {
175 let params = crate::config::endpoint::Params::builder()
176 .region("eu-central-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://memory-db.eu-central-1.amazonaws.com");
184 assert_eq!(
185 endpoint,
186 ::aws_smithy_types::endpoint::Endpoint::builder()
187 .url("https://memory-db.eu-central-1.amazonaws.com")
188 .build()
189 );
190 }
191
192 #[test]
194 fn test_9() {
195 let params = crate::config::endpoint::Params::builder()
196 .region("eu-north-1".to_string())
197 .use_fips(false)
198 .use_dual_stack(false)
199 .build()
200 .expect("invalid params");
201 let resolver = crate::config::endpoint::DefaultResolver::new();
202 let endpoint = resolver.resolve_endpoint(¶ms);
203 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.eu-north-1.amazonaws.com");
204 assert_eq!(
205 endpoint,
206 ::aws_smithy_types::endpoint::Endpoint::builder()
207 .url("https://memory-db.eu-north-1.amazonaws.com")
208 .build()
209 );
210 }
211
212 #[test]
214 fn test_10() {
215 let params = crate::config::endpoint::Params::builder()
216 .region("eu-west-1".to_string())
217 .use_fips(false)
218 .use_dual_stack(false)
219 .build()
220 .expect("invalid params");
221 let resolver = crate::config::endpoint::DefaultResolver::new();
222 let endpoint = resolver.resolve_endpoint(¶ms);
223 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.eu-west-1.amazonaws.com");
224 assert_eq!(
225 endpoint,
226 ::aws_smithy_types::endpoint::Endpoint::builder()
227 .url("https://memory-db.eu-west-1.amazonaws.com")
228 .build()
229 );
230 }
231
232 #[test]
234 fn test_11() {
235 let params = crate::config::endpoint::Params::builder()
236 .region("eu-west-2".to_string())
237 .use_fips(false)
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://memory-db.eu-west-2.amazonaws.com");
244 assert_eq!(
245 endpoint,
246 ::aws_smithy_types::endpoint::Endpoint::builder()
247 .url("https://memory-db.eu-west-2.amazonaws.com")
248 .build()
249 );
250 }
251
252 #[test]
254 fn test_12() {
255 let params = crate::config::endpoint::Params::builder()
256 .region("fips".to_string())
257 .use_fips(false)
258 .use_dual_stack(false)
259 .build()
260 .expect("invalid params");
261 let resolver = crate::config::endpoint::DefaultResolver::new();
262 let endpoint = resolver.resolve_endpoint(¶ms);
263 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db-fips.us-west-1.amazonaws.com");
264 assert_eq!(
265 endpoint,
266 ::aws_smithy_types::endpoint::Endpoint::builder()
267 .url("https://memory-db-fips.us-west-1.amazonaws.com")
268 .property(
269 "authSchemes",
270 vec![{
271 let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::new();
272 out.insert("name".to_string(), "sigv4".to_string().into());
273 out.insert("signingName".to_string(), "memorydb".to_string().into());
274 out.insert("signingRegion".to_string(), "us-west-1".to_string().into());
275 out
276 }
277 .into()]
278 )
279 .build()
280 );
281 }
282
283 #[test]
285 fn test_13() {
286 let params = crate::config::endpoint::Params::builder()
287 .region("sa-east-1".to_string())
288 .use_fips(false)
289 .use_dual_stack(false)
290 .build()
291 .expect("invalid params");
292 let resolver = crate::config::endpoint::DefaultResolver::new();
293 let endpoint = resolver.resolve_endpoint(¶ms);
294 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.sa-east-1.amazonaws.com");
295 assert_eq!(
296 endpoint,
297 ::aws_smithy_types::endpoint::Endpoint::builder()
298 .url("https://memory-db.sa-east-1.amazonaws.com")
299 .build()
300 );
301 }
302
303 #[test]
305 fn test_14() {
306 let params = crate::config::endpoint::Params::builder()
307 .region("us-east-1".to_string())
308 .use_fips(false)
309 .use_dual_stack(false)
310 .build()
311 .expect("invalid params");
312 let resolver = crate::config::endpoint::DefaultResolver::new();
313 let endpoint = resolver.resolve_endpoint(¶ms);
314 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.us-east-1.amazonaws.com");
315 assert_eq!(
316 endpoint,
317 ::aws_smithy_types::endpoint::Endpoint::builder()
318 .url("https://memory-db.us-east-1.amazonaws.com")
319 .build()
320 );
321 }
322
323 #[test]
325 fn test_15() {
326 let params = crate::config::endpoint::Params::builder()
327 .region("us-east-2".to_string())
328 .use_fips(false)
329 .use_dual_stack(false)
330 .build()
331 .expect("invalid params");
332 let resolver = crate::config::endpoint::DefaultResolver::new();
333 let endpoint = resolver.resolve_endpoint(¶ms);
334 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.us-east-2.amazonaws.com");
335 assert_eq!(
336 endpoint,
337 ::aws_smithy_types::endpoint::Endpoint::builder()
338 .url("https://memory-db.us-east-2.amazonaws.com")
339 .build()
340 );
341 }
342
343 #[test]
345 fn test_16() {
346 let params = crate::config::endpoint::Params::builder()
347 .region("us-west-1".to_string())
348 .use_fips(false)
349 .use_dual_stack(false)
350 .build()
351 .expect("invalid params");
352 let resolver = crate::config::endpoint::DefaultResolver::new();
353 let endpoint = resolver.resolve_endpoint(¶ms);
354 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.us-west-1.amazonaws.com");
355 assert_eq!(
356 endpoint,
357 ::aws_smithy_types::endpoint::Endpoint::builder()
358 .url("https://memory-db.us-west-1.amazonaws.com")
359 .build()
360 );
361 }
362
363 #[test]
365 fn test_17() {
366 let params = crate::config::endpoint::Params::builder()
367 .region("us-west-2".to_string())
368 .use_fips(false)
369 .use_dual_stack(false)
370 .build()
371 .expect("invalid params");
372 let resolver = crate::config::endpoint::DefaultResolver::new();
373 let endpoint = resolver.resolve_endpoint(¶ms);
374 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.us-west-2.amazonaws.com");
375 assert_eq!(
376 endpoint,
377 ::aws_smithy_types::endpoint::Endpoint::builder()
378 .url("https://memory-db.us-west-2.amazonaws.com")
379 .build()
380 );
381 }
382
383 #[test]
385 fn test_18() {
386 let params = crate::config::endpoint::Params::builder()
387 .region("us-east-1".to_string())
388 .use_fips(true)
389 .use_dual_stack(true)
390 .build()
391 .expect("invalid params");
392 let resolver = crate::config::endpoint::DefaultResolver::new();
393 let endpoint = resolver.resolve_endpoint(¶ms);
394 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db-fips.us-east-1.api.aws");
395 assert_eq!(
396 endpoint,
397 ::aws_smithy_types::endpoint::Endpoint::builder()
398 .url("https://memory-db-fips.us-east-1.api.aws")
399 .build()
400 );
401 }
402
403 #[test]
405 fn test_19() {
406 let params = crate::config::endpoint::Params::builder()
407 .region("us-east-1".to_string())
408 .use_fips(true)
409 .use_dual_stack(false)
410 .build()
411 .expect("invalid params");
412 let resolver = crate::config::endpoint::DefaultResolver::new();
413 let endpoint = resolver.resolve_endpoint(¶ms);
414 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db-fips.us-east-1.amazonaws.com");
415 assert_eq!(
416 endpoint,
417 ::aws_smithy_types::endpoint::Endpoint::builder()
418 .url("https://memory-db-fips.us-east-1.amazonaws.com")
419 .build()
420 );
421 }
422
423 #[test]
425 fn test_20() {
426 let params = crate::config::endpoint::Params::builder()
427 .region("us-east-1".to_string())
428 .use_fips(false)
429 .use_dual_stack(true)
430 .build()
431 .expect("invalid params");
432 let resolver = crate::config::endpoint::DefaultResolver::new();
433 let endpoint = resolver.resolve_endpoint(¶ms);
434 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.us-east-1.api.aws");
435 assert_eq!(
436 endpoint,
437 ::aws_smithy_types::endpoint::Endpoint::builder()
438 .url("https://memory-db.us-east-1.api.aws")
439 .build()
440 );
441 }
442
443 #[test]
445 fn test_21() {
446 let params = crate::config::endpoint::Params::builder()
447 .region("cn-north-1".to_string())
448 .use_fips(false)
449 .use_dual_stack(false)
450 .build()
451 .expect("invalid params");
452 let resolver = crate::config::endpoint::DefaultResolver::new();
453 let endpoint = resolver.resolve_endpoint(¶ms);
454 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.cn-north-1.amazonaws.com.cn");
455 assert_eq!(
456 endpoint,
457 ::aws_smithy_types::endpoint::Endpoint::builder()
458 .url("https://memory-db.cn-north-1.amazonaws.com.cn")
459 .build()
460 );
461 }
462
463 #[test]
465 fn test_22() {
466 let params = crate::config::endpoint::Params::builder()
467 .region("cn-northwest-1".to_string())
468 .use_fips(false)
469 .use_dual_stack(false)
470 .build()
471 .expect("invalid params");
472 let resolver = crate::config::endpoint::DefaultResolver::new();
473 let endpoint = resolver.resolve_endpoint(¶ms);
474 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.cn-northwest-1.amazonaws.com.cn");
475 assert_eq!(
476 endpoint,
477 ::aws_smithy_types::endpoint::Endpoint::builder()
478 .url("https://memory-db.cn-northwest-1.amazonaws.com.cn")
479 .build()
480 );
481 }
482
483 #[test]
485 fn test_23() {
486 let params = crate::config::endpoint::Params::builder()
487 .region("cn-north-1".to_string())
488 .use_fips(true)
489 .use_dual_stack(true)
490 .build()
491 .expect("invalid params");
492 let resolver = crate::config::endpoint::DefaultResolver::new();
493 let endpoint = resolver.resolve_endpoint(¶ms);
494 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db-fips.cn-north-1.api.amazonwebservices.com.cn");
495 assert_eq!(
496 endpoint,
497 ::aws_smithy_types::endpoint::Endpoint::builder()
498 .url("https://memory-db-fips.cn-north-1.api.amazonwebservices.com.cn")
499 .build()
500 );
501 }
502
503 #[test]
505 fn test_24() {
506 let params = crate::config::endpoint::Params::builder()
507 .region("cn-north-1".to_string())
508 .use_fips(true)
509 .use_dual_stack(false)
510 .build()
511 .expect("invalid params");
512 let resolver = crate::config::endpoint::DefaultResolver::new();
513 let endpoint = resolver.resolve_endpoint(¶ms);
514 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db-fips.cn-north-1.amazonaws.com.cn");
515 assert_eq!(
516 endpoint,
517 ::aws_smithy_types::endpoint::Endpoint::builder()
518 .url("https://memory-db-fips.cn-north-1.amazonaws.com.cn")
519 .build()
520 );
521 }
522
523 #[test]
525 fn test_25() {
526 let params = crate::config::endpoint::Params::builder()
527 .region("cn-north-1".to_string())
528 .use_fips(false)
529 .use_dual_stack(true)
530 .build()
531 .expect("invalid params");
532 let resolver = crate::config::endpoint::DefaultResolver::new();
533 let endpoint = resolver.resolve_endpoint(¶ms);
534 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.cn-north-1.api.amazonwebservices.com.cn");
535 assert_eq!(
536 endpoint,
537 ::aws_smithy_types::endpoint::Endpoint::builder()
538 .url("https://memory-db.cn-north-1.api.amazonwebservices.com.cn")
539 .build()
540 );
541 }
542
543 #[test]
545 fn test_26() {
546 let params = crate::config::endpoint::Params::builder()
547 .region("us-gov-east-1".to_string())
548 .use_fips(true)
549 .use_dual_stack(true)
550 .build()
551 .expect("invalid params");
552 let resolver = crate::config::endpoint::DefaultResolver::new();
553 let endpoint = resolver.resolve_endpoint(¶ms);
554 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db-fips.us-gov-east-1.api.aws");
555 assert_eq!(
556 endpoint,
557 ::aws_smithy_types::endpoint::Endpoint::builder()
558 .url("https://memory-db-fips.us-gov-east-1.api.aws")
559 .build()
560 );
561 }
562
563 #[test]
565 fn test_27() {
566 let params = crate::config::endpoint::Params::builder()
567 .region("us-gov-east-1".to_string())
568 .use_fips(true)
569 .use_dual_stack(false)
570 .build()
571 .expect("invalid params");
572 let resolver = crate::config::endpoint::DefaultResolver::new();
573 let endpoint = resolver.resolve_endpoint(¶ms);
574 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db-fips.us-gov-east-1.amazonaws.com");
575 assert_eq!(
576 endpoint,
577 ::aws_smithy_types::endpoint::Endpoint::builder()
578 .url("https://memory-db-fips.us-gov-east-1.amazonaws.com")
579 .build()
580 );
581 }
582
583 #[test]
585 fn test_28() {
586 let params = crate::config::endpoint::Params::builder()
587 .region("us-gov-east-1".to_string())
588 .use_fips(false)
589 .use_dual_stack(true)
590 .build()
591 .expect("invalid params");
592 let resolver = crate::config::endpoint::DefaultResolver::new();
593 let endpoint = resolver.resolve_endpoint(¶ms);
594 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.us-gov-east-1.api.aws");
595 assert_eq!(
596 endpoint,
597 ::aws_smithy_types::endpoint::Endpoint::builder()
598 .url("https://memory-db.us-gov-east-1.api.aws")
599 .build()
600 );
601 }
602
603 #[test]
605 fn test_29() {
606 let params = crate::config::endpoint::Params::builder()
607 .region("us-gov-east-1".to_string())
608 .use_fips(false)
609 .use_dual_stack(false)
610 .build()
611 .expect("invalid params");
612 let resolver = crate::config::endpoint::DefaultResolver::new();
613 let endpoint = resolver.resolve_endpoint(¶ms);
614 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.us-gov-east-1.amazonaws.com");
615 assert_eq!(
616 endpoint,
617 ::aws_smithy_types::endpoint::Endpoint::builder()
618 .url("https://memory-db.us-gov-east-1.amazonaws.com")
619 .build()
620 );
621 }
622
623 #[test]
625 fn test_30() {
626 let params = crate::config::endpoint::Params::builder()
627 .region("us-iso-east-1".to_string())
628 .use_fips(true)
629 .use_dual_stack(false)
630 .build()
631 .expect("invalid params");
632 let resolver = crate::config::endpoint::DefaultResolver::new();
633 let endpoint = resolver.resolve_endpoint(¶ms);
634 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db-fips.us-iso-east-1.c2s.ic.gov");
635 assert_eq!(
636 endpoint,
637 ::aws_smithy_types::endpoint::Endpoint::builder()
638 .url("https://memory-db-fips.us-iso-east-1.c2s.ic.gov")
639 .build()
640 );
641 }
642
643 #[test]
645 fn test_31() {
646 let params = crate::config::endpoint::Params::builder()
647 .region("us-iso-east-1".to_string())
648 .use_fips(false)
649 .use_dual_stack(false)
650 .build()
651 .expect("invalid params");
652 let resolver = crate::config::endpoint::DefaultResolver::new();
653 let endpoint = resolver.resolve_endpoint(¶ms);
654 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.us-iso-east-1.c2s.ic.gov");
655 assert_eq!(
656 endpoint,
657 ::aws_smithy_types::endpoint::Endpoint::builder()
658 .url("https://memory-db.us-iso-east-1.c2s.ic.gov")
659 .build()
660 );
661 }
662
663 #[test]
665 fn test_32() {
666 let params = crate::config::endpoint::Params::builder()
667 .region("us-isob-east-1".to_string())
668 .use_fips(true)
669 .use_dual_stack(false)
670 .build()
671 .expect("invalid params");
672 let resolver = crate::config::endpoint::DefaultResolver::new();
673 let endpoint = resolver.resolve_endpoint(¶ms);
674 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db-fips.us-isob-east-1.sc2s.sgov.gov");
675 assert_eq!(
676 endpoint,
677 ::aws_smithy_types::endpoint::Endpoint::builder()
678 .url("https://memory-db-fips.us-isob-east-1.sc2s.sgov.gov")
679 .build()
680 );
681 }
682
683 #[test]
685 fn test_33() {
686 let params = crate::config::endpoint::Params::builder()
687 .region("us-isob-east-1".to_string())
688 .use_fips(false)
689 .use_dual_stack(false)
690 .build()
691 .expect("invalid params");
692 let resolver = crate::config::endpoint::DefaultResolver::new();
693 let endpoint = resolver.resolve_endpoint(¶ms);
694 let endpoint = endpoint.expect("Expected valid endpoint: https://memory-db.us-isob-east-1.sc2s.sgov.gov");
695 assert_eq!(
696 endpoint,
697 ::aws_smithy_types::endpoint::Endpoint::builder()
698 .url("https://memory-db.us-isob-east-1.sc2s.sgov.gov")
699 .build()
700 );
701 }
702
703 #[test]
705 fn test_34() {
706 let params = crate::config::endpoint::Params::builder()
707 .region("us-east-1".to_string())
708 .use_fips(false)
709 .use_dual_stack(false)
710 .endpoint("https://example.com".to_string())
711 .build()
712 .expect("invalid params");
713 let resolver = crate::config::endpoint::DefaultResolver::new();
714 let endpoint = resolver.resolve_endpoint(¶ms);
715 let endpoint = endpoint.expect("Expected valid endpoint: https://example.com");
716 assert_eq!(
717 endpoint,
718 ::aws_smithy_types::endpoint::Endpoint::builder().url("https://example.com").build()
719 );
720 }
721
722 #[test]
724 fn test_35() {
725 let params = crate::config::endpoint::Params::builder()
726 .use_fips(false)
727 .use_dual_stack(false)
728 .endpoint("https://example.com".to_string())
729 .build()
730 .expect("invalid params");
731 let resolver = crate::config::endpoint::DefaultResolver::new();
732 let endpoint = resolver.resolve_endpoint(¶ms);
733 let endpoint = endpoint.expect("Expected valid endpoint: https://example.com");
734 assert_eq!(
735 endpoint,
736 ::aws_smithy_types::endpoint::Endpoint::builder().url("https://example.com").build()
737 );
738 }
739
740 #[test]
742 fn test_36() {
743 let params = crate::config::endpoint::Params::builder()
744 .region("us-east-1".to_string())
745 .use_fips(true)
746 .use_dual_stack(false)
747 .endpoint("https://example.com".to_string())
748 .build()
749 .expect("invalid params");
750 let resolver = crate::config::endpoint::DefaultResolver::new();
751 let endpoint = resolver.resolve_endpoint(¶ms);
752 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]");
753 assert_eq!(format!("{}", error), "Invalid Configuration: FIPS and custom endpoint are not supported")
754 }
755
756 #[test]
758 fn test_37() {
759 let params = crate::config::endpoint::Params::builder()
760 .region("us-east-1".to_string())
761 .use_fips(false)
762 .use_dual_stack(true)
763 .endpoint("https://example.com".to_string())
764 .build()
765 .expect("invalid params");
766 let resolver = crate::config::endpoint::DefaultResolver::new();
767 let endpoint = resolver.resolve_endpoint(¶ms);
768 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]");
769 assert_eq!(
770 format!("{}", error),
771 "Invalid Configuration: Dualstack and custom endpoint are not supported"
772 )
773 }
774
775 #[test]
777 fn test_38() {
778 let params = crate::config::endpoint::Params::builder().build().expect("invalid params");
779 let resolver = crate::config::endpoint::DefaultResolver::new();
780 let endpoint = resolver.resolve_endpoint(¶ms);
781 let error = endpoint.expect_err("expected error: Invalid Configuration: Missing Region [Missing region]");
782 assert_eq!(format!("{}", error), "Invalid Configuration: Missing Region")
783 }
784}
785
786pub trait ResolveEndpoint: ::std::marker::Send + ::std::marker::Sync + ::std::fmt::Debug {
788 fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a>;
790
791 fn into_shared_resolver(self) -> ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver
795 where
796 Self: Sized + 'static,
797 {
798 ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver::new(DowncastParams(self))
799 }
800}
801
802#[derive(Debug)]
803struct DowncastParams<T>(T);
804impl<T> ::aws_smithy_runtime_api::client::endpoint::ResolveEndpoint for DowncastParams<T>
805where
806 T: ResolveEndpoint,
807{
808 fn resolve_endpoint<'a>(
809 &'a self,
810 params: &'a ::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams,
811 ) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a> {
812 let ep = match params.get::<crate::config::endpoint::Params>() {
813 Some(params) => self.0.resolve_endpoint(params),
814 None => ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(Err("params of expected type was not present".into())),
815 };
816 ep
817 }
818}
819
820#[derive(Debug, Default)]
822pub struct DefaultResolver {
823 partition_resolver: crate::endpoint_lib::partition::PartitionResolver,
824}
825
826impl DefaultResolver {
827 pub fn new() -> Self {
829 Self {
830 partition_resolver: crate::endpoint_lib::DEFAULT_PARTITION_RESOLVER.clone(),
831 }
832 }
833
834 fn resolve_endpoint(
835 &self,
836 params: &crate::config::endpoint::Params,
837 ) -> ::std::result::Result<::aws_smithy_types::endpoint::Endpoint, ::aws_smithy_runtime_api::box_error::BoxError> {
838 let mut diagnostic_collector = crate::endpoint_lib::diagnostic::DiagnosticCollector::new();
839 Ok(
840 crate::config::endpoint::internals::resolve_endpoint(params, &mut diagnostic_collector, &self.partition_resolver)
841 .map_err(|err| err.with_source(diagnostic_collector.take_last_error()))?,
842 )
843 }
844}
845
846impl crate::config::endpoint::ResolveEndpoint for DefaultResolver {
847 fn resolve_endpoint(&self, params: &crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'_> {
848 ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(self.resolve_endpoint(params))
849 }
850}
851
852#[non_exhaustive]
853#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
854pub struct Params {
856 pub(crate) region: ::std::option::Option<::std::string::String>,
858 pub(crate) use_dual_stack: bool,
860 pub(crate) use_fips: bool,
862 pub(crate) endpoint: ::std::option::Option<::std::string::String>,
864}
865impl Params {
866 pub fn builder() -> crate::config::endpoint::ParamsBuilder {
868 crate::config::endpoint::ParamsBuilder::default()
869 }
870 pub fn region(&self) -> ::std::option::Option<&str> {
872 self.region.as_deref()
873 }
874 pub fn use_dual_stack(&self) -> ::std::option::Option<bool> {
876 Some(self.use_dual_stack)
877 }
878 pub fn use_fips(&self) -> ::std::option::Option<bool> {
880 Some(self.use_fips)
881 }
882 pub fn endpoint(&self) -> ::std::option::Option<&str> {
884 self.endpoint.as_deref()
885 }
886}
887
888#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
890pub struct ParamsBuilder {
891 region: ::std::option::Option<::std::string::String>,
892 use_dual_stack: ::std::option::Option<bool>,
893 use_fips: ::std::option::Option<bool>,
894 endpoint: ::std::option::Option<::std::string::String>,
895}
896impl ParamsBuilder {
897 pub fn build(self) -> ::std::result::Result<crate::config::endpoint::Params, crate::config::endpoint::InvalidParams> {
899 if let Some(region) = &self.region {
900 if !crate::endpoint_lib::host::is_valid_host_label(
901 region.as_ref() as &str,
902 true,
903 &mut crate::endpoint_lib::diagnostic::DiagnosticCollector::new(),
904 ) {
905 return Err(crate::config::endpoint::InvalidParams::invalid_value(
906 "region",
907 "must be a valid host label",
908 ));
909 }
910 };
911 Ok(
912 #[allow(clippy::unnecessary_lazy_evaluations)]
913 crate::config::endpoint::Params {
914 region: self.region,
915 use_dual_stack: self
916 .use_dual_stack
917 .or_else(|| Some(false))
918 .ok_or_else(|| crate::config::endpoint::InvalidParams::missing("use_dual_stack"))?,
919 use_fips: self
920 .use_fips
921 .or_else(|| Some(false))
922 .ok_or_else(|| crate::config::endpoint::InvalidParams::missing("use_fips"))?,
923 endpoint: self.endpoint,
924 },
925 )
926 }
927 pub fn region(mut self, value: impl Into<::std::string::String>) -> Self {
931 self.region = Some(value.into());
932 self
933 }
934
935 pub fn set_region(mut self, param: Option<::std::string::String>) -> Self {
939 self.region = param;
940 self
941 }
942 pub fn use_dual_stack(mut self, value: impl Into<bool>) -> Self {
947 self.use_dual_stack = Some(value.into());
948 self
949 }
950
951 pub fn set_use_dual_stack(mut self, param: Option<bool>) -> Self {
956 self.use_dual_stack = param;
957 self
958 }
959 pub fn use_fips(mut self, value: impl Into<bool>) -> Self {
964 self.use_fips = Some(value.into());
965 self
966 }
967
968 pub fn set_use_fips(mut self, param: Option<bool>) -> Self {
973 self.use_fips = param;
974 self
975 }
976 pub fn endpoint(mut self, value: impl Into<::std::string::String>) -> Self {
980 self.endpoint = Some(value.into());
981 self
982 }
983
984 pub fn set_endpoint(mut self, param: Option<::std::string::String>) -> Self {
988 self.endpoint = param;
989 self
990 }
991}
992
993#[derive(Debug)]
995pub struct InvalidParams {
996 field: std::borrow::Cow<'static, str>,
997 kind: InvalidParamsErrorKind,
998}
999
1000#[derive(Debug)]
1002enum InvalidParamsErrorKind {
1003 MissingField,
1004 InvalidValue { message: &'static str },
1005}
1006
1007impl InvalidParams {
1008 #[allow(dead_code)]
1009 fn missing(field: &'static str) -> Self {
1010 Self {
1011 field: field.into(),
1012 kind: InvalidParamsErrorKind::MissingField,
1013 }
1014 }
1015
1016 #[allow(dead_code)]
1017 fn invalid_value(field: &'static str, message: &'static str) -> Self {
1018 Self {
1019 field: field.into(),
1020 kind: InvalidParamsErrorKind::InvalidValue { message },
1021 }
1022 }
1023}
1024
1025impl std::fmt::Display for InvalidParams {
1026 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1027 match self.kind {
1028 InvalidParamsErrorKind::MissingField => write!(f, "a required field was missing: `{}`", self.field),
1029 InvalidParamsErrorKind::InvalidValue { message } => write!(f, "invalid value for field: `{}` - {}", self.field, message),
1030 }
1031 }
1032}
1033
1034impl std::error::Error for InvalidParams {}
1035
1036mod internals;