1pub use ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver;
3 pub use ::aws_smithy_runtime_api::client::endpoint::EndpointFuture;
4 pub use ::aws_smithy_types::endpoint::Endpoint;
5
6#[derive(Debug, Default)]
8 pub(crate) struct EndpointOverrideFeatureTrackerInterceptor;
9
10 #[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
11 impl ::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().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://portal.sso.ap-east-1.amazonaws.com");
43 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.ap-east-1.amazonaws.com")
44 .build());
45 }
46
47 #[test]
49 fn test_2() {
50 let params = crate::config::endpoint::Params::builder()
51 .region("ap-northeast-1".to_string())
52 .use_fips(false)
53 .use_dual_stack(false)
54 .build().expect("invalid params");
55 let resolver = crate::config::endpoint::DefaultResolver::new();
56 let endpoint = resolver.resolve_endpoint(¶ms);
57 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.ap-northeast-1.amazonaws.com");
58 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.ap-northeast-1.amazonaws.com")
59 .build());
60 }
61
62 #[test]
64 fn test_3() {
65 let params = crate::config::endpoint::Params::builder()
66 .region("ap-northeast-2".to_string())
67 .use_fips(false)
68 .use_dual_stack(false)
69 .build().expect("invalid params");
70 let resolver = crate::config::endpoint::DefaultResolver::new();
71 let endpoint = resolver.resolve_endpoint(¶ms);
72 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.ap-northeast-2.amazonaws.com");
73 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.ap-northeast-2.amazonaws.com")
74 .build());
75 }
76
77 #[test]
79 fn test_4() {
80 let params = crate::config::endpoint::Params::builder()
81 .region("ap-northeast-3".to_string())
82 .use_fips(false)
83 .use_dual_stack(false)
84 .build().expect("invalid params");
85 let resolver = crate::config::endpoint::DefaultResolver::new();
86 let endpoint = resolver.resolve_endpoint(¶ms);
87 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.ap-northeast-3.amazonaws.com");
88 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.ap-northeast-3.amazonaws.com")
89 .build());
90 }
91
92 #[test]
94 fn test_5() {
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().expect("invalid params");
100 let resolver = crate::config::endpoint::DefaultResolver::new();
101 let endpoint = resolver.resolve_endpoint(¶ms);
102 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.ap-south-1.amazonaws.com");
103 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.ap-south-1.amazonaws.com")
104 .build());
105 }
106
107 #[test]
109 fn test_6() {
110 let params = crate::config::endpoint::Params::builder()
111 .region("ap-southeast-1".to_string())
112 .use_fips(false)
113 .use_dual_stack(false)
114 .build().expect("invalid params");
115 let resolver = crate::config::endpoint::DefaultResolver::new();
116 let endpoint = resolver.resolve_endpoint(¶ms);
117 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.ap-southeast-1.amazonaws.com");
118 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.ap-southeast-1.amazonaws.com")
119 .build());
120 }
121
122 #[test]
124 fn test_7() {
125 let params = crate::config::endpoint::Params::builder()
126 .region("ap-southeast-2".to_string())
127 .use_fips(false)
128 .use_dual_stack(false)
129 .build().expect("invalid params");
130 let resolver = crate::config::endpoint::DefaultResolver::new();
131 let endpoint = resolver.resolve_endpoint(¶ms);
132 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.ap-southeast-2.amazonaws.com");
133 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.ap-southeast-2.amazonaws.com")
134 .build());
135 }
136
137 #[test]
139 fn test_8() {
140 let params = crate::config::endpoint::Params::builder()
141 .region("ca-central-1".to_string())
142 .use_fips(false)
143 .use_dual_stack(false)
144 .build().expect("invalid params");
145 let resolver = crate::config::endpoint::DefaultResolver::new();
146 let endpoint = resolver.resolve_endpoint(¶ms);
147 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.ca-central-1.amazonaws.com");
148 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.ca-central-1.amazonaws.com")
149 .build());
150 }
151
152 #[test]
154 fn test_9() {
155 let params = crate::config::endpoint::Params::builder()
156 .region("eu-central-1".to_string())
157 .use_fips(false)
158 .use_dual_stack(false)
159 .build().expect("invalid params");
160 let resolver = crate::config::endpoint::DefaultResolver::new();
161 let endpoint = resolver.resolve_endpoint(¶ms);
162 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.eu-central-1.amazonaws.com");
163 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.eu-central-1.amazonaws.com")
164 .build());
165 }
166
167 #[test]
169 fn test_10() {
170 let params = crate::config::endpoint::Params::builder()
171 .region("eu-north-1".to_string())
172 .use_fips(false)
173 .use_dual_stack(false)
174 .build().expect("invalid params");
175 let resolver = crate::config::endpoint::DefaultResolver::new();
176 let endpoint = resolver.resolve_endpoint(¶ms);
177 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.eu-north-1.amazonaws.com");
178 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.eu-north-1.amazonaws.com")
179 .build());
180 }
181
182 #[test]
184 fn test_11() {
185 let params = crate::config::endpoint::Params::builder()
186 .region("eu-south-1".to_string())
187 .use_fips(false)
188 .use_dual_stack(false)
189 .build().expect("invalid params");
190 let resolver = crate::config::endpoint::DefaultResolver::new();
191 let endpoint = resolver.resolve_endpoint(¶ms);
192 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.eu-south-1.amazonaws.com");
193 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.eu-south-1.amazonaws.com")
194 .build());
195 }
196
197 #[test]
199 fn test_12() {
200 let params = crate::config::endpoint::Params::builder()
201 .region("eu-west-1".to_string())
202 .use_fips(false)
203 .use_dual_stack(false)
204 .build().expect("invalid params");
205 let resolver = crate::config::endpoint::DefaultResolver::new();
206 let endpoint = resolver.resolve_endpoint(¶ms);
207 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.eu-west-1.amazonaws.com");
208 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.eu-west-1.amazonaws.com")
209 .build());
210 }
211
212 #[test]
214 fn test_13() {
215 let params = crate::config::endpoint::Params::builder()
216 .region("eu-west-2".to_string())
217 .use_fips(false)
218 .use_dual_stack(false)
219 .build().expect("invalid params");
220 let resolver = crate::config::endpoint::DefaultResolver::new();
221 let endpoint = resolver.resolve_endpoint(¶ms);
222 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.eu-west-2.amazonaws.com");
223 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.eu-west-2.amazonaws.com")
224 .build());
225 }
226
227 #[test]
229 fn test_14() {
230 let params = crate::config::endpoint::Params::builder()
231 .region("eu-west-3".to_string())
232 .use_fips(false)
233 .use_dual_stack(false)
234 .build().expect("invalid params");
235 let resolver = crate::config::endpoint::DefaultResolver::new();
236 let endpoint = resolver.resolve_endpoint(¶ms);
237 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.eu-west-3.amazonaws.com");
238 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.eu-west-3.amazonaws.com")
239 .build());
240 }
241
242 #[test]
244 fn test_15() {
245 let params = crate::config::endpoint::Params::builder()
246 .region("me-south-1".to_string())
247 .use_fips(false)
248 .use_dual_stack(false)
249 .build().expect("invalid params");
250 let resolver = crate::config::endpoint::DefaultResolver::new();
251 let endpoint = resolver.resolve_endpoint(¶ms);
252 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.me-south-1.amazonaws.com");
253 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.me-south-1.amazonaws.com")
254 .build());
255 }
256
257 #[test]
259 fn test_16() {
260 let params = crate::config::endpoint::Params::builder()
261 .region("sa-east-1".to_string())
262 .use_fips(false)
263 .use_dual_stack(false)
264 .build().expect("invalid params");
265 let resolver = crate::config::endpoint::DefaultResolver::new();
266 let endpoint = resolver.resolve_endpoint(¶ms);
267 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.sa-east-1.amazonaws.com");
268 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.sa-east-1.amazonaws.com")
269 .build());
270 }
271
272 #[test]
274 fn test_17() {
275 let params = crate::config::endpoint::Params::builder()
276 .region("us-east-1".to_string())
277 .use_fips(false)
278 .use_dual_stack(false)
279 .build().expect("invalid params");
280 let resolver = crate::config::endpoint::DefaultResolver::new();
281 let endpoint = resolver.resolve_endpoint(¶ms);
282 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.us-east-1.amazonaws.com");
283 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.us-east-1.amazonaws.com")
284 .build());
285 }
286
287 #[test]
289 fn test_18() {
290 let params = crate::config::endpoint::Params::builder()
291 .region("us-east-2".to_string())
292 .use_fips(false)
293 .use_dual_stack(false)
294 .build().expect("invalid params");
295 let resolver = crate::config::endpoint::DefaultResolver::new();
296 let endpoint = resolver.resolve_endpoint(¶ms);
297 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.us-east-2.amazonaws.com");
298 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.us-east-2.amazonaws.com")
299 .build());
300 }
301
302 #[test]
304 fn test_19() {
305 let params = crate::config::endpoint::Params::builder()
306 .region("us-west-2".to_string())
307 .use_fips(false)
308 .use_dual_stack(false)
309 .build().expect("invalid params");
310 let resolver = crate::config::endpoint::DefaultResolver::new();
311 let endpoint = resolver.resolve_endpoint(¶ms);
312 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.us-west-2.amazonaws.com");
313 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.us-west-2.amazonaws.com")
314 .build());
315 }
316
317 #[test]
319 fn test_20() {
320 let params = crate::config::endpoint::Params::builder()
321 .region("us-east-1".to_string())
322 .use_fips(true)
323 .use_dual_stack(true)
324 .build().expect("invalid params");
325 let resolver = crate::config::endpoint::DefaultResolver::new();
326 let endpoint = resolver.resolve_endpoint(¶ms);
327 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso-fips.us-east-1.api.aws");
328 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso-fips.us-east-1.api.aws")
329 .build());
330 }
331
332 #[test]
334 fn test_21() {
335 let params = crate::config::endpoint::Params::builder()
336 .region("us-east-1".to_string())
337 .use_fips(true)
338 .use_dual_stack(false)
339 .build().expect("invalid params");
340 let resolver = crate::config::endpoint::DefaultResolver::new();
341 let endpoint = resolver.resolve_endpoint(¶ms);
342 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso-fips.us-east-1.amazonaws.com");
343 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso-fips.us-east-1.amazonaws.com")
344 .build());
345 }
346
347 #[test]
349 fn test_22() {
350 let params = crate::config::endpoint::Params::builder()
351 .region("us-east-1".to_string())
352 .use_fips(false)
353 .use_dual_stack(true)
354 .build().expect("invalid params");
355 let resolver = crate::config::endpoint::DefaultResolver::new();
356 let endpoint = resolver.resolve_endpoint(¶ms);
357 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.us-east-1.api.aws");
358 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.us-east-1.api.aws")
359 .build());
360 }
361
362 #[test]
364 fn test_23() {
365 let params = crate::config::endpoint::Params::builder()
366 .region("cn-north-1".to_string())
367 .use_fips(true)
368 .use_dual_stack(true)
369 .build().expect("invalid params");
370 let resolver = crate::config::endpoint::DefaultResolver::new();
371 let endpoint = resolver.resolve_endpoint(¶ms);
372 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso-fips.cn-north-1.api.amazonwebservices.com.cn");
373 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso-fips.cn-north-1.api.amazonwebservices.com.cn")
374 .build());
375 }
376
377 #[test]
379 fn test_24() {
380 let params = crate::config::endpoint::Params::builder()
381 .region("cn-north-1".to_string())
382 .use_fips(true)
383 .use_dual_stack(false)
384 .build().expect("invalid params");
385 let resolver = crate::config::endpoint::DefaultResolver::new();
386 let endpoint = resolver.resolve_endpoint(¶ms);
387 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso-fips.cn-north-1.amazonaws.com.cn");
388 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso-fips.cn-north-1.amazonaws.com.cn")
389 .build());
390 }
391
392 #[test]
394 fn test_25() {
395 let params = crate::config::endpoint::Params::builder()
396 .region("cn-north-1".to_string())
397 .use_fips(false)
398 .use_dual_stack(true)
399 .build().expect("invalid params");
400 let resolver = crate::config::endpoint::DefaultResolver::new();
401 let endpoint = resolver.resolve_endpoint(¶ms);
402 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.cn-north-1.api.amazonwebservices.com.cn");
403 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.cn-north-1.api.amazonwebservices.com.cn")
404 .build());
405 }
406
407 #[test]
409 fn test_26() {
410 let params = crate::config::endpoint::Params::builder()
411 .region("cn-north-1".to_string())
412 .use_fips(false)
413 .use_dual_stack(false)
414 .build().expect("invalid params");
415 let resolver = crate::config::endpoint::DefaultResolver::new();
416 let endpoint = resolver.resolve_endpoint(¶ms);
417 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.cn-north-1.amazonaws.com.cn");
418 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.cn-north-1.amazonaws.com.cn")
419 .build());
420 }
421
422 #[test]
424 fn test_27() {
425 let params = crate::config::endpoint::Params::builder()
426 .region("us-gov-east-1".to_string())
427 .use_fips(false)
428 .use_dual_stack(false)
429 .build().expect("invalid params");
430 let resolver = crate::config::endpoint::DefaultResolver::new();
431 let endpoint = resolver.resolve_endpoint(¶ms);
432 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.us-gov-east-1.amazonaws.com");
433 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.us-gov-east-1.amazonaws.com")
434 .build());
435 }
436
437 #[test]
439 fn test_28() {
440 let params = crate::config::endpoint::Params::builder()
441 .region("us-gov-west-1".to_string())
442 .use_fips(false)
443 .use_dual_stack(false)
444 .build().expect("invalid params");
445 let resolver = crate::config::endpoint::DefaultResolver::new();
446 let endpoint = resolver.resolve_endpoint(¶ms);
447 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.us-gov-west-1.amazonaws.com");
448 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.us-gov-west-1.amazonaws.com")
449 .build());
450 }
451
452 #[test]
454 fn test_29() {
455 let params = crate::config::endpoint::Params::builder()
456 .region("us-gov-east-1".to_string())
457 .use_fips(true)
458 .use_dual_stack(true)
459 .build().expect("invalid params");
460 let resolver = crate::config::endpoint::DefaultResolver::new();
461 let endpoint = resolver.resolve_endpoint(¶ms);
462 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso-fips.us-gov-east-1.api.aws");
463 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso-fips.us-gov-east-1.api.aws")
464 .build());
465 }
466
467 #[test]
469 fn test_30() {
470 let params = crate::config::endpoint::Params::builder()
471 .region("us-gov-east-1".to_string())
472 .use_fips(true)
473 .use_dual_stack(false)
474 .build().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://portal.sso.us-gov-east-1.amazonaws.com");
478 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.us-gov-east-1.amazonaws.com")
479 .build());
480 }
481
482 #[test]
484 fn test_31() {
485 let params = crate::config::endpoint::Params::builder()
486 .region("us-gov-east-1".to_string())
487 .use_fips(false)
488 .use_dual_stack(true)
489 .build().expect("invalid params");
490 let resolver = crate::config::endpoint::DefaultResolver::new();
491 let endpoint = resolver.resolve_endpoint(¶ms);
492 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.us-gov-east-1.api.aws");
493 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.us-gov-east-1.api.aws")
494 .build());
495 }
496
497 #[test]
499 fn test_32() {
500 let params = crate::config::endpoint::Params::builder()
501 .region("us-iso-east-1".to_string())
502 .use_fips(true)
503 .use_dual_stack(false)
504 .build().expect("invalid params");
505 let resolver = crate::config::endpoint::DefaultResolver::new();
506 let endpoint = resolver.resolve_endpoint(¶ms);
507 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso-fips.us-iso-east-1.c2s.ic.gov");
508 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso-fips.us-iso-east-1.c2s.ic.gov")
509 .build());
510 }
511
512 #[test]
514 fn test_33() {
515 let params = crate::config::endpoint::Params::builder()
516 .region("us-iso-east-1".to_string())
517 .use_fips(false)
518 .use_dual_stack(false)
519 .build().expect("invalid params");
520 let resolver = crate::config::endpoint::DefaultResolver::new();
521 let endpoint = resolver.resolve_endpoint(¶ms);
522 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.us-iso-east-1.c2s.ic.gov");
523 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.us-iso-east-1.c2s.ic.gov")
524 .build());
525 }
526
527 #[test]
529 fn test_34() {
530 let params = crate::config::endpoint::Params::builder()
531 .region("us-isob-east-1".to_string())
532 .use_fips(true)
533 .use_dual_stack(false)
534 .build().expect("invalid params");
535 let resolver = crate::config::endpoint::DefaultResolver::new();
536 let endpoint = resolver.resolve_endpoint(¶ms);
537 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso-fips.us-isob-east-1.sc2s.sgov.gov");
538 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso-fips.us-isob-east-1.sc2s.sgov.gov")
539 .build());
540 }
541
542 #[test]
544 fn test_35() {
545 let params = crate::config::endpoint::Params::builder()
546 .region("us-isob-east-1".to_string())
547 .use_fips(false)
548 .use_dual_stack(false)
549 .build().expect("invalid params");
550 let resolver = crate::config::endpoint::DefaultResolver::new();
551 let endpoint = resolver.resolve_endpoint(¶ms);
552 let endpoint = endpoint.expect("Expected valid endpoint: https://portal.sso.us-isob-east-1.sc2s.sgov.gov");
553 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://portal.sso.us-isob-east-1.sc2s.sgov.gov")
554 .build());
555 }
556
557 #[test]
559 fn test_36() {
560 let params = crate::config::endpoint::Params::builder()
561 .region("us-east-1".to_string())
562 .use_fips(false)
563 .use_dual_stack(false)
564 .endpoint("https://example.com".to_string())
565 .build().expect("invalid params");
566 let resolver = crate::config::endpoint::DefaultResolver::new();
567 let endpoint = resolver.resolve_endpoint(¶ms);
568 let endpoint = endpoint.expect("Expected valid endpoint: https://example.com");
569 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://example.com")
570 .build());
571 }
572
573 #[test]
575 fn test_37() {
576 let params = crate::config::endpoint::Params::builder()
577 .use_fips(false)
578 .use_dual_stack(false)
579 .endpoint("https://example.com".to_string())
580 .build().expect("invalid params");
581 let resolver = crate::config::endpoint::DefaultResolver::new();
582 let endpoint = resolver.resolve_endpoint(¶ms);
583 let endpoint = endpoint.expect("Expected valid endpoint: https://example.com");
584 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://example.com")
585 .build());
586 }
587
588 #[test]
590 fn test_38() {
591 let params = crate::config::endpoint::Params::builder()
592 .region("us-east-1".to_string())
593 .use_fips(true)
594 .use_dual_stack(false)
595 .endpoint("https://example.com".to_string())
596 .build().expect("invalid params");
597 let resolver = crate::config::endpoint::DefaultResolver::new();
598 let endpoint = resolver.resolve_endpoint(¶ms);
599 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]");
600 assert_eq!(format!("{}", error), "Invalid Configuration: FIPS and custom endpoint are not supported")
601 }
602
603 #[test]
605 fn test_39() {
606 let params = crate::config::endpoint::Params::builder()
607 .region("us-east-1".to_string())
608 .use_fips(false)
609 .use_dual_stack(true)
610 .endpoint("https://example.com".to_string())
611 .build().expect("invalid params");
612 let resolver = crate::config::endpoint::DefaultResolver::new();
613 let endpoint = resolver.resolve_endpoint(¶ms);
614 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]");
615 assert_eq!(format!("{}", error), "Invalid Configuration: Dualstack and custom endpoint are not supported")
616 }
617
618 #[test]
620 fn test_40() {
621 let params = crate::config::endpoint::Params::builder()
622 .build().expect("invalid params");
623 let resolver = crate::config::endpoint::DefaultResolver::new();
624 let endpoint = resolver.resolve_endpoint(¶ms);
625 let error = endpoint.expect_err("expected error: Invalid Configuration: Missing Region [Missing region]");
626 assert_eq!(format!("{}", error), "Invalid Configuration: Missing Region")
627 }
628
629
630}
631
632pub trait ResolveEndpoint: ::std::marker::Send + ::std::marker::Sync + ::std::fmt::Debug {
634 fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a>;
636
637 fn into_shared_resolver(self) -> ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver
641 where
642 Self: Sized + 'static,
643 {
644 ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver::new(DowncastParams(self))
645 }
646 }
647
648 #[derive(Debug)]
649 struct DowncastParams<T>(T);
650 impl<T> ::aws_smithy_runtime_api::client::endpoint::ResolveEndpoint for DowncastParams<T>
651 where
652 T: ResolveEndpoint,
653 {
654 fn resolve_endpoint<'a>(&'a self, params: &'a ::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a> {
655 let ep = match params.get::<crate::config::endpoint::Params>() {
656 Some(params) => self.0.resolve_endpoint(params),
657 None => ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(Err("params of expected type was not present".into())),
658 };
659 ep
660 }
661
662 }
663
664#[derive(Debug)]
665 pub struct DefaultResolver {
667 partition_resolver: &'static crate::endpoint_lib::partition::PartitionResolver,
668 endpoint_cache: ::arc_swap::ArcSwap<::std::option::Option<(Params, ::aws_smithy_types::endpoint::Endpoint)>>,
669 }
670
671 impl Default for DefaultResolver {
672 fn default() -> Self {
673 Self::new()
674 }
675 }
676
677 impl DefaultResolver {
678 pub fn new() -> Self {
680 Self {
681 partition_resolver: &crate::endpoint_lib::DEFAULT_PARTITION_RESOLVER,
682 endpoint_cache: ::arc_swap::ArcSwap::from_pointee(None),
683 }
684 }
685
686 #[allow(unused_variables, unused_parens, clippy::double_parens, clippy::useless_conversion, clippy::bool_comparison, clippy::comparison_to_empty, clippy::needless_borrow, clippy::useless_asref, clippy::redundant_closure_call, clippy::clone_on_copy, clippy::single_char_add_str)]
687 fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::std::result::Result<::aws_smithy_types::endpoint::Endpoint, ::aws_smithy_runtime_api::box_error::BoxError> {
688 let mut _diagnostic_collector = crate::endpoint_lib::diagnostic::DiagnosticCollector::new();
689 #[allow(unused_mut)]
690 let mut context = ConditionContext::default();
691
692 let region = ¶ms.region;
694let use_dual_stack = ¶ms.use_dual_stack;
695let use_fips = ¶ms.use_fips;
696let endpoint = ¶ms.endpoint;
697
698 let mut current_ref: i32 = 2;
699 loop {
700 match current_ref {
701 ref_val if ref_val >= 100_000_000 => {
702 return match (ref_val - 100_000_000) as usize {
703 0 => ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("No endpoint rule matched")) as ::aws_smithy_runtime_api::box_error::BoxError),
7041 => {
705
706 ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("Invalid Configuration: FIPS and custom endpoint are not supported"
707.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
708 },
7092 => {
710
711 ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("Invalid Configuration: Dualstack and custom endpoint are not supported"
712.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
713 },
7143 => {
715 let endpoint = params.endpoint.as_deref().unwrap_or_default();
716 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url(endpoint.to_owned())
717.build())
718 },
7194 => {
720 let region = params.region.as_deref().unwrap_or_default();
721let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
722 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
723out.push_str("https://portal.sso-fips.");
724#[allow(clippy::needless_borrow)]
725out.push_str(®ion.as_ref());
726out.push_str(".");
727#[allow(clippy::needless_borrow)]
728out.push_str(&partition_result.dual_stack_dns_suffix());
729out })
730.build())
731 },
7325 => {
733
734 ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("FIPS and DualStack are enabled, but this partition does not support one or both"
735.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
736 },
7376 => {
738 let region = params.region.as_deref().unwrap_or_default();
739 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
740out.push_str("https://portal.sso.");
741#[allow(clippy::needless_borrow)]
742out.push_str(®ion.as_ref());
743out.push_str(".amazonaws.com");
744out })
745.build())
746 },
7477 => {
748 let region = params.region.as_deref().unwrap_or_default();
749let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
750 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
751out.push_str("https://portal.sso-fips.");
752#[allow(clippy::needless_borrow)]
753out.push_str(®ion.as_ref());
754out.push_str(".");
755#[allow(clippy::needless_borrow)]
756out.push_str(&partition_result.dns_suffix());
757out })
758.build())
759 },
7608 => {
761
762 ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("FIPS is enabled but this partition does not support FIPS"
763.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
764 },
7659 => {
766 let region = params.region.as_deref().unwrap_or_default();
767let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
768 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
769out.push_str("https://portal.sso.");
770#[allow(clippy::needless_borrow)]
771out.push_str(®ion.as_ref());
772out.push_str(".");
773#[allow(clippy::needless_borrow)]
774out.push_str(&partition_result.dual_stack_dns_suffix());
775out })
776.build())
777 },
77810 => {
779
780 ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("DualStack is enabled but this partition does not support DualStack"
781.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
782 },
78311 => {
784 let region = params.region.as_deref().unwrap_or_default();
785let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
786 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
787out.push_str("https://portal.sso.");
788#[allow(clippy::needless_borrow)]
789out.push_str(®ion.as_ref());
790out.push_str(".");
791#[allow(clippy::needless_borrow)]
792out.push_str(&partition_result.dns_suffix());
793out })
794.build())
795 },
79612 => {
797
798 ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("Invalid Configuration: Missing Region"
799.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
800 },
801 _ => ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("No endpoint rule matched")) as ::aws_smithy_runtime_api::box_error::BoxError),
802 };
803 }
804 1 | -1 => return ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("No endpoint rule matched")) as ::aws_smithy_runtime_api::box_error::BoxError),
805 ref_val => {
806 let is_complement = ref_val < 0;
807 let node = &NODES[(ref_val.unsigned_abs() as usize) - 1];
808 let condition_result = match node.condition_index {
809 0 => endpoint.is_some(),
8101 => region.is_some(),
8112 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
812 let partition_result = &mut context.partition_result;
813 let partition_resolver = &self.partition_resolver;
814 {
815 *partition_result = partition_resolver.resolve_partition(if let Some(param) = region{
816 param
817 } else {
818 return false
819 }, _diagnostic_collector).map(|inner| inner.into());
820 partition_result.is_some()
821}
822 })(&mut _diagnostic_collector),
8233 => (use_fips) == (&true),
8244 => (use_dual_stack) == (&true),
8255 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
826 let partition_result = & context.partition_result;
827 let partition_resolver = &self.partition_resolver;
828 (if let Some(inner) = partition_result {
829 inner.supports_dual_stack()
830}else{
831 return false
832})
833==
834(true)
835 })(&mut _diagnostic_collector),
8366 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
837 let partition_result = & context.partition_result;
838 let partition_resolver = &self.partition_resolver;
839 (if let Some(inner) = partition_result {
840 inner.supports_fips()
841}else{
842 return false
843})
844==
845(true)
846 })(&mut _diagnostic_collector),
8477 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
848 let partition_result = & context.partition_result;
849 let partition_resolver = &self.partition_resolver;
850 (if let Some(inner) = partition_result {
851 inner.name()
852}else{
853 return false
854})
855==
856("aws-us-gov")
857 })(&mut _diagnostic_collector),
858 _ => unreachable!("Invalid condition index"),
859 };
860 current_ref = if is_complement ^ condition_result { node.high_ref } else { node.low_ref };
861 }
862 }
863 }
864 }
865 }
866
867 impl crate::config::endpoint::ResolveEndpoint for DefaultResolver {
868 fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a> {
869 let cached = self.endpoint_cache.load();
871 if let Some((cached_params, cached_endpoint)) = cached.as_ref() {
872 if cached_params == params {
873 return ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(::std::result::Result::Ok(cached_endpoint.clone()));
874 }
875 }
876 drop(cached);
877 let result = self.resolve_endpoint(params);
878 if let ::std::result::Result::Ok(ref endpoint) = result {
879 self.endpoint_cache.store(::std::sync::Arc::new(Some((params.clone(), endpoint.clone()))));
880 }
881 ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(result)
882 }
883 }
884 const NODES: [crate::endpoint_lib::bdd_interpreter::BddNode; 14] = [
885crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: -1, high_ref: 1, low_ref: -1 },
886crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 0, high_ref: 13, low_ref: 3 },
887crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 1, high_ref: 4, low_ref: 100000012 },
888crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 2, high_ref: 5, low_ref: 100000012 },
889crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 3, high_ref: 8, low_ref: 6 },
890crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 4, high_ref: 7, low_ref: 100000011 },
891crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 5, high_ref: 100000009, low_ref: 100000010 },
892crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 4, high_ref: 11, low_ref: 9 },
893crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 6, high_ref: 10, low_ref: 100000008 },
894crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 7, high_ref: 100000006, low_ref: 100000007 },
895crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 5, high_ref: 12, low_ref: 100000005 },
896crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 6, high_ref: 100000004, low_ref: 100000005 },
897crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 3, high_ref: 100000001, low_ref: 14 },
898crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 4, high_ref: 100000002, low_ref: 100000003 }
899];
900 #[derive(Default)]
903#[allow(unused_lifetimes)]
904pub(crate) struct ConditionContext<'a> {
905 pub(crate) partition_result: Option<crate::endpoint_lib::partition::Partition<'a>>,
906 phantom: std::marker::PhantomData<&'a ()>
908}
909
910#[non_exhaustive]
911#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
912pub struct Params {
914 pub(crate) region: ::std::option::Option<::std::string::String>,
916 pub(crate) use_dual_stack: bool,
918 pub(crate) use_fips: bool,
920 pub(crate) endpoint: ::std::option::Option<::std::string::String>,
922}
923impl Params {
924 pub fn builder() -> crate::config::endpoint::ParamsBuilder {
926 crate::config::endpoint::ParamsBuilder::default()
927 }
928 pub fn region(&self) -> ::std::option::Option<&str> {
930 self.region.as_deref()
931 }
932 pub fn use_dual_stack(&self) -> ::std::option::Option<bool> {
934 Some(self.use_dual_stack)
935 }
936 pub fn use_fips(&self) -> ::std::option::Option<bool> {
938 Some(self.use_fips)
939 }
940 pub fn endpoint(&self) -> ::std::option::Option<&str> {
942 self.endpoint.as_deref()
943 }
944}
945
946#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
948pub struct ParamsBuilder {
949 region: ::std::option::Option<::std::string::String>,
950 use_dual_stack: ::std::option::Option<bool>,
951 use_fips: ::std::option::Option<bool>,
952 endpoint: ::std::option::Option<::std::string::String>,
953}
954impl ParamsBuilder {
955 pub fn build(self) -> ::std::result::Result<crate::config::endpoint::Params, crate::config::endpoint::InvalidParams> {
957 if let Some(region) = &self.region {
958 if !crate::endpoint_lib::host::is_valid_host_label(region.as_ref() as &str, true, &mut crate::endpoint_lib::diagnostic::DiagnosticCollector::new()) {
959 return Err(crate::config::endpoint::InvalidParams::invalid_value("region", "must be a valid host label"))
960 }
961 };
962 Ok(#[allow(clippy::unnecessary_lazy_evaluations)]
963 crate::config::endpoint::Params {
964 region: self.region
965 ,
966 use_dual_stack: self.use_dual_stack
967 .or_else(||Some(false))
968 .ok_or_else(||crate::config::endpoint::InvalidParams::missing("use_dual_stack"))?
969 ,
970 use_fips: self.use_fips
971 .or_else(||Some(false))
972 .ok_or_else(||crate::config::endpoint::InvalidParams::missing("use_fips"))?
973 ,
974 endpoint: self.endpoint
975 ,
976 })
977 }
978 pub fn region(mut self, value: impl Into<::std::string::String>) -> Self {
982 self.region = Some(value.into());
983 self
984 }
985
986 pub fn set_region(mut self, param: Option<::std::string::String>) -> Self {
990 self.region = param;
991 self
992 }
993 pub fn use_dual_stack(mut self, value: impl Into<bool>) -> Self {
998 self.use_dual_stack = Some(value.into());
999 self
1000 }
1001
1002 pub fn set_use_dual_stack(mut self, param: Option<bool>) -> Self {
1007 self.use_dual_stack = param;
1008 self
1009 }
1010 pub fn use_fips(mut self, value: impl Into<bool>) -> Self {
1015 self.use_fips = Some(value.into());
1016 self
1017 }
1018
1019 pub fn set_use_fips(mut self, param: Option<bool>) -> Self {
1024 self.use_fips = param;
1025 self
1026 }
1027 pub fn endpoint(mut self, value: impl Into<::std::string::String>) -> Self {
1031 self.endpoint = Some(value.into());
1032 self
1033 }
1034
1035 pub fn set_endpoint(mut self, param: Option<::std::string::String>) -> Self {
1039 self.endpoint = param;
1040 self
1041 }
1042}
1043
1044#[derive(Debug)]
1046 pub struct InvalidParams {
1047 field: std::borrow::Cow<'static, str>,
1048 kind: InvalidParamsErrorKind,
1049 }
1050
1051 #[derive(Debug)]
1053 enum InvalidParamsErrorKind {
1054 MissingField,
1055 InvalidValue {
1056 message: &'static str,
1057 }
1058 }
1059
1060 impl InvalidParams {
1061 #[allow(dead_code)]
1062 fn missing(field: &'static str) -> Self {
1063 Self { field: field.into(), kind: InvalidParamsErrorKind::MissingField }
1064 }
1065
1066 #[allow(dead_code)]
1067 fn invalid_value(field: &'static str, message: &'static str) -> Self {
1068 Self { field: field.into(), kind: InvalidParamsErrorKind::InvalidValue { message }}
1069 }
1070 }
1071
1072 impl std::fmt::Display for InvalidParams {
1073 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1074 match self.kind {
1075 InvalidParamsErrorKind::MissingField => write!(f, "a required field was missing: `{}`", self.field),
1076 InvalidParamsErrorKind::InvalidValue { message} => write!(f, "invalid value for field: `{}` - {}", self.field, message),
1077 }
1078 }
1079 }
1080
1081 impl std::error::Error for InvalidParams { }
1082