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 impl ::aws_smithy_runtime_api::client::interceptors::Intercept for EndpointOverrideFeatureTrackerInterceptor {
11 fn name(&self) -> &'static str {
12 "EndpointOverrideFeatureTrackerInterceptor"
13 }
14
15 fn read_before_execution(
16 &self,
17 _context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<'_>,
18 cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
19 ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
20 if cfg.load::<::aws_types::endpoint_config::EndpointUrl>().is_some() {
21 cfg.interceptor_state()
22 .store_append(::aws_runtime::sdk_feature::AwsSdkFeature::EndpointOverride);
23 }
24 ::std::result::Result::Ok(())
25 }
26 }
27
28#[cfg(test)]
29mod test {
30
31 #[test]
33 fn test_1() {
34 let params = crate::config::endpoint::Params::builder()
35 .region("ap-east-1".to_string())
36 .use_fips(false)
37 .use_dual_stack(false)
38 .build().expect("invalid params");
39 let resolver = crate::config::endpoint::DefaultResolver::new();
40 let endpoint = resolver.resolve_endpoint(¶ms);
41 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.ap-east-1.amazonaws.com");
42 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.ap-east-1.amazonaws.com")
43 .build());
44 }
45
46 #[test]
48 fn test_2() {
49 let params = crate::config::endpoint::Params::builder()
50 .region("ap-northeast-1".to_string())
51 .use_fips(false)
52 .use_dual_stack(false)
53 .build().expect("invalid params");
54 let resolver = crate::config::endpoint::DefaultResolver::new();
55 let endpoint = resolver.resolve_endpoint(¶ms);
56 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.ap-northeast-1.amazonaws.com");
57 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.ap-northeast-1.amazonaws.com")
58 .build());
59 }
60
61 #[test]
63 fn test_3() {
64 let params = crate::config::endpoint::Params::builder()
65 .region("ap-northeast-2".to_string())
66 .use_fips(false)
67 .use_dual_stack(false)
68 .build().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://oidc.ap-northeast-2.amazonaws.com");
72 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.ap-northeast-2.amazonaws.com")
73 .build());
74 }
75
76 #[test]
78 fn test_4() {
79 let params = crate::config::endpoint::Params::builder()
80 .region("ap-northeast-3".to_string())
81 .use_fips(false)
82 .use_dual_stack(false)
83 .build().expect("invalid params");
84 let resolver = crate::config::endpoint::DefaultResolver::new();
85 let endpoint = resolver.resolve_endpoint(¶ms);
86 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.ap-northeast-3.amazonaws.com");
87 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.ap-northeast-3.amazonaws.com")
88 .build());
89 }
90
91 #[test]
93 fn test_5() {
94 let params = crate::config::endpoint::Params::builder()
95 .region("ap-south-1".to_string())
96 .use_fips(false)
97 .use_dual_stack(false)
98 .build().expect("invalid params");
99 let resolver = crate::config::endpoint::DefaultResolver::new();
100 let endpoint = resolver.resolve_endpoint(¶ms);
101 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.ap-south-1.amazonaws.com");
102 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.ap-south-1.amazonaws.com")
103 .build());
104 }
105
106 #[test]
108 fn test_6() {
109 let params = crate::config::endpoint::Params::builder()
110 .region("ap-southeast-1".to_string())
111 .use_fips(false)
112 .use_dual_stack(false)
113 .build().expect("invalid params");
114 let resolver = crate::config::endpoint::DefaultResolver::new();
115 let endpoint = resolver.resolve_endpoint(¶ms);
116 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.ap-southeast-1.amazonaws.com");
117 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.ap-southeast-1.amazonaws.com")
118 .build());
119 }
120
121 #[test]
123 fn test_7() {
124 let params = crate::config::endpoint::Params::builder()
125 .region("ap-southeast-2".to_string())
126 .use_fips(false)
127 .use_dual_stack(false)
128 .build().expect("invalid params");
129 let resolver = crate::config::endpoint::DefaultResolver::new();
130 let endpoint = resolver.resolve_endpoint(¶ms);
131 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.ap-southeast-2.amazonaws.com");
132 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.ap-southeast-2.amazonaws.com")
133 .build());
134 }
135
136 #[test]
138 fn test_8() {
139 let params = crate::config::endpoint::Params::builder()
140 .region("ca-central-1".to_string())
141 .use_fips(false)
142 .use_dual_stack(false)
143 .build().expect("invalid params");
144 let resolver = crate::config::endpoint::DefaultResolver::new();
145 let endpoint = resolver.resolve_endpoint(¶ms);
146 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.ca-central-1.amazonaws.com");
147 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.ca-central-1.amazonaws.com")
148 .build());
149 }
150
151 #[test]
153 fn test_9() {
154 let params = crate::config::endpoint::Params::builder()
155 .region("eu-central-1".to_string())
156 .use_fips(false)
157 .use_dual_stack(false)
158 .build().expect("invalid params");
159 let resolver = crate::config::endpoint::DefaultResolver::new();
160 let endpoint = resolver.resolve_endpoint(¶ms);
161 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.eu-central-1.amazonaws.com");
162 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.eu-central-1.amazonaws.com")
163 .build());
164 }
165
166 #[test]
168 fn test_10() {
169 let params = crate::config::endpoint::Params::builder()
170 .region("eu-north-1".to_string())
171 .use_fips(false)
172 .use_dual_stack(false)
173 .build().expect("invalid params");
174 let resolver = crate::config::endpoint::DefaultResolver::new();
175 let endpoint = resolver.resolve_endpoint(¶ms);
176 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.eu-north-1.amazonaws.com");
177 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.eu-north-1.amazonaws.com")
178 .build());
179 }
180
181 #[test]
183 fn test_11() {
184 let params = crate::config::endpoint::Params::builder()
185 .region("eu-south-1".to_string())
186 .use_fips(false)
187 .use_dual_stack(false)
188 .build().expect("invalid params");
189 let resolver = crate::config::endpoint::DefaultResolver::new();
190 let endpoint = resolver.resolve_endpoint(¶ms);
191 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.eu-south-1.amazonaws.com");
192 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.eu-south-1.amazonaws.com")
193 .build());
194 }
195
196 #[test]
198 fn test_12() {
199 let params = crate::config::endpoint::Params::builder()
200 .region("eu-west-1".to_string())
201 .use_fips(false)
202 .use_dual_stack(false)
203 .build().expect("invalid params");
204 let resolver = crate::config::endpoint::DefaultResolver::new();
205 let endpoint = resolver.resolve_endpoint(¶ms);
206 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.eu-west-1.amazonaws.com");
207 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.eu-west-1.amazonaws.com")
208 .build());
209 }
210
211 #[test]
213 fn test_13() {
214 let params = crate::config::endpoint::Params::builder()
215 .region("eu-west-2".to_string())
216 .use_fips(false)
217 .use_dual_stack(false)
218 .build().expect("invalid params");
219 let resolver = crate::config::endpoint::DefaultResolver::new();
220 let endpoint = resolver.resolve_endpoint(¶ms);
221 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.eu-west-2.amazonaws.com");
222 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.eu-west-2.amazonaws.com")
223 .build());
224 }
225
226 #[test]
228 fn test_14() {
229 let params = crate::config::endpoint::Params::builder()
230 .region("eu-west-3".to_string())
231 .use_fips(false)
232 .use_dual_stack(false)
233 .build().expect("invalid params");
234 let resolver = crate::config::endpoint::DefaultResolver::new();
235 let endpoint = resolver.resolve_endpoint(¶ms);
236 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.eu-west-3.amazonaws.com");
237 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.eu-west-3.amazonaws.com")
238 .build());
239 }
240
241 #[test]
243 fn test_15() {
244 let params = crate::config::endpoint::Params::builder()
245 .region("me-south-1".to_string())
246 .use_fips(false)
247 .use_dual_stack(false)
248 .build().expect("invalid params");
249 let resolver = crate::config::endpoint::DefaultResolver::new();
250 let endpoint = resolver.resolve_endpoint(¶ms);
251 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.me-south-1.amazonaws.com");
252 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.me-south-1.amazonaws.com")
253 .build());
254 }
255
256 #[test]
258 fn test_16() {
259 let params = crate::config::endpoint::Params::builder()
260 .region("sa-east-1".to_string())
261 .use_fips(false)
262 .use_dual_stack(false)
263 .build().expect("invalid params");
264 let resolver = crate::config::endpoint::DefaultResolver::new();
265 let endpoint = resolver.resolve_endpoint(¶ms);
266 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.sa-east-1.amazonaws.com");
267 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.sa-east-1.amazonaws.com")
268 .build());
269 }
270
271 #[test]
273 fn test_17() {
274 let params = crate::config::endpoint::Params::builder()
275 .region("us-east-1".to_string())
276 .use_fips(false)
277 .use_dual_stack(false)
278 .build().expect("invalid params");
279 let resolver = crate::config::endpoint::DefaultResolver::new();
280 let endpoint = resolver.resolve_endpoint(¶ms);
281 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.us-east-1.amazonaws.com");
282 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.us-east-1.amazonaws.com")
283 .build());
284 }
285
286 #[test]
288 fn test_18() {
289 let params = crate::config::endpoint::Params::builder()
290 .region("us-east-2".to_string())
291 .use_fips(false)
292 .use_dual_stack(false)
293 .build().expect("invalid params");
294 let resolver = crate::config::endpoint::DefaultResolver::new();
295 let endpoint = resolver.resolve_endpoint(¶ms);
296 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.us-east-2.amazonaws.com");
297 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.us-east-2.amazonaws.com")
298 .build());
299 }
300
301 #[test]
303 fn test_19() {
304 let params = crate::config::endpoint::Params::builder()
305 .region("us-west-2".to_string())
306 .use_fips(false)
307 .use_dual_stack(false)
308 .build().expect("invalid params");
309 let resolver = crate::config::endpoint::DefaultResolver::new();
310 let endpoint = resolver.resolve_endpoint(¶ms);
311 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.us-west-2.amazonaws.com");
312 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.us-west-2.amazonaws.com")
313 .build());
314 }
315
316 #[test]
318 fn test_20() {
319 let params = crate::config::endpoint::Params::builder()
320 .region("us-east-1".to_string())
321 .use_fips(true)
322 .use_dual_stack(true)
323 .build().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://oidc-fips.us-east-1.api.aws");
327 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc-fips.us-east-1.api.aws")
328 .build());
329 }
330
331 #[test]
333 fn test_21() {
334 let params = crate::config::endpoint::Params::builder()
335 .region("us-east-1".to_string())
336 .use_fips(true)
337 .use_dual_stack(false)
338 .build().expect("invalid params");
339 let resolver = crate::config::endpoint::DefaultResolver::new();
340 let endpoint = resolver.resolve_endpoint(¶ms);
341 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc-fips.us-east-1.amazonaws.com");
342 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc-fips.us-east-1.amazonaws.com")
343 .build());
344 }
345
346 #[test]
348 fn test_22() {
349 let params = crate::config::endpoint::Params::builder()
350 .region("us-east-1".to_string())
351 .use_fips(false)
352 .use_dual_stack(true)
353 .build().expect("invalid params");
354 let resolver = crate::config::endpoint::DefaultResolver::new();
355 let endpoint = resolver.resolve_endpoint(¶ms);
356 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.us-east-1.api.aws");
357 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.us-east-1.api.aws")
358 .build());
359 }
360
361 #[test]
363 fn test_23() {
364 let params = crate::config::endpoint::Params::builder()
365 .region("cn-north-1".to_string())
366 .use_fips(true)
367 .use_dual_stack(true)
368 .build().expect("invalid params");
369 let resolver = crate::config::endpoint::DefaultResolver::new();
370 let endpoint = resolver.resolve_endpoint(¶ms);
371 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc-fips.cn-north-1.api.amazonwebservices.com.cn");
372 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc-fips.cn-north-1.api.amazonwebservices.com.cn")
373 .build());
374 }
375
376 #[test]
378 fn test_24() {
379 let params = crate::config::endpoint::Params::builder()
380 .region("cn-north-1".to_string())
381 .use_fips(true)
382 .use_dual_stack(false)
383 .build().expect("invalid params");
384 let resolver = crate::config::endpoint::DefaultResolver::new();
385 let endpoint = resolver.resolve_endpoint(¶ms);
386 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc-fips.cn-north-1.amazonaws.com.cn");
387 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc-fips.cn-north-1.amazonaws.com.cn")
388 .build());
389 }
390
391 #[test]
393 fn test_25() {
394 let params = crate::config::endpoint::Params::builder()
395 .region("cn-north-1".to_string())
396 .use_fips(false)
397 .use_dual_stack(true)
398 .build().expect("invalid params");
399 let resolver = crate::config::endpoint::DefaultResolver::new();
400 let endpoint = resolver.resolve_endpoint(¶ms);
401 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.cn-north-1.api.amazonwebservices.com.cn");
402 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.cn-north-1.api.amazonwebservices.com.cn")
403 .build());
404 }
405
406 #[test]
408 fn test_26() {
409 let params = crate::config::endpoint::Params::builder()
410 .region("cn-north-1".to_string())
411 .use_fips(false)
412 .use_dual_stack(false)
413 .build().expect("invalid params");
414 let resolver = crate::config::endpoint::DefaultResolver::new();
415 let endpoint = resolver.resolve_endpoint(¶ms);
416 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.cn-north-1.amazonaws.com.cn");
417 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.cn-north-1.amazonaws.com.cn")
418 .build());
419 }
420
421 #[test]
423 fn test_27() {
424 let params = crate::config::endpoint::Params::builder()
425 .region("us-gov-east-1".to_string())
426 .use_fips(false)
427 .use_dual_stack(false)
428 .build().expect("invalid params");
429 let resolver = crate::config::endpoint::DefaultResolver::new();
430 let endpoint = resolver.resolve_endpoint(¶ms);
431 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.us-gov-east-1.amazonaws.com");
432 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.us-gov-east-1.amazonaws.com")
433 .build());
434 }
435
436 #[test]
438 fn test_28() {
439 let params = crate::config::endpoint::Params::builder()
440 .region("us-gov-west-1".to_string())
441 .use_fips(false)
442 .use_dual_stack(false)
443 .build().expect("invalid params");
444 let resolver = crate::config::endpoint::DefaultResolver::new();
445 let endpoint = resolver.resolve_endpoint(¶ms);
446 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.us-gov-west-1.amazonaws.com");
447 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.us-gov-west-1.amazonaws.com")
448 .build());
449 }
450
451 #[test]
453 fn test_29() {
454 let params = crate::config::endpoint::Params::builder()
455 .region("us-gov-east-1".to_string())
456 .use_fips(true)
457 .use_dual_stack(true)
458 .build().expect("invalid params");
459 let resolver = crate::config::endpoint::DefaultResolver::new();
460 let endpoint = resolver.resolve_endpoint(¶ms);
461 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc-fips.us-gov-east-1.api.aws");
462 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc-fips.us-gov-east-1.api.aws")
463 .build());
464 }
465
466 #[test]
468 fn test_30() {
469 let params = crate::config::endpoint::Params::builder()
470 .region("us-gov-east-1".to_string())
471 .use_fips(true)
472 .use_dual_stack(false)
473 .build().expect("invalid params");
474 let resolver = crate::config::endpoint::DefaultResolver::new();
475 let endpoint = resolver.resolve_endpoint(¶ms);
476 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.us-gov-east-1.amazonaws.com");
477 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.us-gov-east-1.amazonaws.com")
478 .build());
479 }
480
481 #[test]
483 fn test_31() {
484 let params = crate::config::endpoint::Params::builder()
485 .region("us-gov-east-1".to_string())
486 .use_fips(false)
487 .use_dual_stack(true)
488 .build().expect("invalid params");
489 let resolver = crate::config::endpoint::DefaultResolver::new();
490 let endpoint = resolver.resolve_endpoint(¶ms);
491 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.us-gov-east-1.api.aws");
492 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.us-gov-east-1.api.aws")
493 .build());
494 }
495
496 #[test]
498 fn test_32() {
499 let params = crate::config::endpoint::Params::builder()
500 .region("us-iso-east-1".to_string())
501 .use_fips(true)
502 .use_dual_stack(false)
503 .build().expect("invalid params");
504 let resolver = crate::config::endpoint::DefaultResolver::new();
505 let endpoint = resolver.resolve_endpoint(¶ms);
506 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc-fips.us-iso-east-1.c2s.ic.gov");
507 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc-fips.us-iso-east-1.c2s.ic.gov")
508 .build());
509 }
510
511 #[test]
513 fn test_33() {
514 let params = crate::config::endpoint::Params::builder()
515 .region("us-iso-east-1".to_string())
516 .use_fips(false)
517 .use_dual_stack(false)
518 .build().expect("invalid params");
519 let resolver = crate::config::endpoint::DefaultResolver::new();
520 let endpoint = resolver.resolve_endpoint(¶ms);
521 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.us-iso-east-1.c2s.ic.gov");
522 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.us-iso-east-1.c2s.ic.gov")
523 .build());
524 }
525
526 #[test]
528 fn test_34() {
529 let params = crate::config::endpoint::Params::builder()
530 .region("us-isob-east-1".to_string())
531 .use_fips(true)
532 .use_dual_stack(false)
533 .build().expect("invalid params");
534 let resolver = crate::config::endpoint::DefaultResolver::new();
535 let endpoint = resolver.resolve_endpoint(¶ms);
536 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc-fips.us-isob-east-1.sc2s.sgov.gov");
537 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc-fips.us-isob-east-1.sc2s.sgov.gov")
538 .build());
539 }
540
541 #[test]
543 fn test_35() {
544 let params = crate::config::endpoint::Params::builder()
545 .region("us-isob-east-1".to_string())
546 .use_fips(false)
547 .use_dual_stack(false)
548 .build().expect("invalid params");
549 let resolver = crate::config::endpoint::DefaultResolver::new();
550 let endpoint = resolver.resolve_endpoint(¶ms);
551 let endpoint = endpoint.expect("Expected valid endpoint: https://oidc.us-isob-east-1.sc2s.sgov.gov");
552 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://oidc.us-isob-east-1.sc2s.sgov.gov")
553 .build());
554 }
555
556 #[test]
558 fn test_36() {
559 let params = crate::config::endpoint::Params::builder()
560 .region("us-east-1".to_string())
561 .use_fips(false)
562 .use_dual_stack(false)
563 .endpoint("https://example.com".to_string())
564 .build().expect("invalid params");
565 let resolver = crate::config::endpoint::DefaultResolver::new();
566 let endpoint = resolver.resolve_endpoint(¶ms);
567 let endpoint = endpoint.expect("Expected valid endpoint: https://example.com");
568 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://example.com")
569 .build());
570 }
571
572 #[test]
574 fn test_37() {
575 let params = crate::config::endpoint::Params::builder()
576 .use_fips(false)
577 .use_dual_stack(false)
578 .endpoint("https://example.com".to_string())
579 .build().expect("invalid params");
580 let resolver = crate::config::endpoint::DefaultResolver::new();
581 let endpoint = resolver.resolve_endpoint(¶ms);
582 let endpoint = endpoint.expect("Expected valid endpoint: https://example.com");
583 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://example.com")
584 .build());
585 }
586
587 #[test]
589 fn test_38() {
590 let params = crate::config::endpoint::Params::builder()
591 .region("us-east-1".to_string())
592 .use_fips(true)
593 .use_dual_stack(false)
594 .endpoint("https://example.com".to_string())
595 .build().expect("invalid params");
596 let resolver = crate::config::endpoint::DefaultResolver::new();
597 let endpoint = resolver.resolve_endpoint(¶ms);
598 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]");
599 assert_eq!(format!("{}", error), "Invalid Configuration: FIPS and custom endpoint are not supported")
600 }
601
602 #[test]
604 fn test_39() {
605 let params = crate::config::endpoint::Params::builder()
606 .region("us-east-1".to_string())
607 .use_fips(false)
608 .use_dual_stack(true)
609 .endpoint("https://example.com".to_string())
610 .build().expect("invalid params");
611 let resolver = crate::config::endpoint::DefaultResolver::new();
612 let endpoint = resolver.resolve_endpoint(¶ms);
613 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]");
614 assert_eq!(format!("{}", error), "Invalid Configuration: Dualstack and custom endpoint are not supported")
615 }
616
617 #[test]
619 fn test_40() {
620 let params = crate::config::endpoint::Params::builder()
621 .build().expect("invalid params");
622 let resolver = crate::config::endpoint::DefaultResolver::new();
623 let endpoint = resolver.resolve_endpoint(¶ms);
624 let error = endpoint.expect_err("expected error: Invalid Configuration: Missing Region [Missing region]");
625 assert_eq!(format!("{}", error), "Invalid Configuration: Missing Region")
626 }
627
628
629}
630
631pub trait ResolveEndpoint: ::std::marker::Send + ::std::marker::Sync + ::std::fmt::Debug {
633 fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a>;
635
636 fn into_shared_resolver(self) -> ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver
640 where
641 Self: Sized + 'static,
642 {
643 ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver::new(DowncastParams(self))
644 }
645 }
646
647 #[derive(Debug)]
648 struct DowncastParams<T>(T);
649 impl<T> ::aws_smithy_runtime_api::client::endpoint::ResolveEndpoint for DowncastParams<T>
650 where
651 T: ResolveEndpoint,
652 {
653 fn resolve_endpoint<'a>(&'a self, params: &'a ::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a> {
654 let ep = match params.get::<crate::config::endpoint::Params>() {
655 Some(params) => self.0.resolve_endpoint(params),
656 None => ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(Err("params of expected type was not present".into())),
657 };
658 ep
659 }
660
661 }
662
663#[derive(Debug, Default)]
665 pub struct DefaultResolver {
666 partition_resolver: crate::endpoint_lib::partition::PartitionResolver
667 }
668
669 impl DefaultResolver {
670 pub fn new() -> Self {
672 Self { partition_resolver: crate::endpoint_lib::DEFAULT_PARTITION_RESOLVER.clone() }
673 }
674
675 fn resolve_endpoint(&self, params: &crate::config::endpoint::Params) -> ::std::result::Result<::aws_smithy_types::endpoint::Endpoint, ::aws_smithy_runtime_api::box_error::BoxError> {
676 let mut diagnostic_collector = crate::endpoint_lib::diagnostic::DiagnosticCollector::new();
677 Ok(crate::config::endpoint::internals::resolve_endpoint(params, &mut diagnostic_collector, &self.partition_resolver)
678 .map_err(|err|err.with_source(diagnostic_collector.take_last_error()))?)
679 }
680 }
681
682 impl crate::config::endpoint::ResolveEndpoint for DefaultResolver {
683 fn resolve_endpoint(&self, params: &crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'_> {
684 ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(self.resolve_endpoint(params))
685 }
686 }
687
688#[non_exhaustive]
689#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
690pub struct Params {
692 pub(crate) region: ::std::option::Option<::std::string::String>,
694 pub(crate) use_dual_stack: bool,
696 pub(crate) use_fips: bool,
698 pub(crate) endpoint: ::std::option::Option<::std::string::String>,
700}
701impl Params {
702 pub fn builder() -> crate::config::endpoint::ParamsBuilder {
704 crate::config::endpoint::ParamsBuilder::default()
705 }
706 pub fn region(&self) -> ::std::option::Option<&str> {
708 self.region.as_deref()
709 }
710 pub fn use_dual_stack(&self) -> ::std::option::Option<bool> {
712 Some(self.use_dual_stack)
713 }
714 pub fn use_fips(&self) -> ::std::option::Option<bool> {
716 Some(self.use_fips)
717 }
718 pub fn endpoint(&self) -> ::std::option::Option<&str> {
720 self.endpoint.as_deref()
721 }
722}
723
724#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
726pub struct ParamsBuilder {
727 region: ::std::option::Option<::std::string::String>,
728 use_dual_stack: ::std::option::Option<bool>,
729 use_fips: ::std::option::Option<bool>,
730 endpoint: ::std::option::Option<::std::string::String>,
731}
732impl ParamsBuilder {
733 pub fn build(self) -> ::std::result::Result<crate::config::endpoint::Params, crate::config::endpoint::InvalidParams> {
735 if let Some(region) = &self.region {
736 if !crate::endpoint_lib::host::is_valid_host_label(region.as_ref() as &str, true, &mut crate::endpoint_lib::diagnostic::DiagnosticCollector::new()) {
737 return Err(crate::config::endpoint::InvalidParams::invalid_value("region", "must be a valid host label"))
738 }
739 };
740 Ok(#[allow(clippy::unnecessary_lazy_evaluations)]
741 crate::config::endpoint::Params {
742 region: self.region
743 ,
744 use_dual_stack: self.use_dual_stack
745 .or_else(||Some(false))
746 .ok_or_else(||crate::config::endpoint::InvalidParams::missing("use_dual_stack"))?
747 ,
748 use_fips: self.use_fips
749 .or_else(||Some(false))
750 .ok_or_else(||crate::config::endpoint::InvalidParams::missing("use_fips"))?
751 ,
752 endpoint: self.endpoint
753 ,
754 })
755 }
756 pub fn region(mut self, value: impl Into<::std::string::String>) -> Self {
760 self.region = Some(value.into());
761 self
762 }
763
764 pub fn set_region(mut self, param: Option<::std::string::String>) -> Self {
768 self.region = param;
769 self
770 }
771 pub fn use_dual_stack(mut self, value: impl Into<bool>) -> Self {
776 self.use_dual_stack = Some(value.into());
777 self
778 }
779
780 pub fn set_use_dual_stack(mut self, param: Option<bool>) -> Self {
785 self.use_dual_stack = param;
786 self
787 }
788 pub fn use_fips(mut self, value: impl Into<bool>) -> Self {
793 self.use_fips = Some(value.into());
794 self
795 }
796
797 pub fn set_use_fips(mut self, param: Option<bool>) -> Self {
802 self.use_fips = param;
803 self
804 }
805 pub fn endpoint(mut self, value: impl Into<::std::string::String>) -> Self {
809 self.endpoint = Some(value.into());
810 self
811 }
812
813 pub fn set_endpoint(mut self, param: Option<::std::string::String>) -> Self {
817 self.endpoint = param;
818 self
819 }
820}
821
822#[derive(Debug)]
824 pub struct InvalidParams {
825 field: std::borrow::Cow<'static, str>,
826 kind: InvalidParamsErrorKind,
827 }
828
829 #[derive(Debug)]
831 enum InvalidParamsErrorKind {
832 MissingField,
833 InvalidValue {
834 message: &'static str,
835 }
836 }
837
838 impl InvalidParams {
839 #[allow(dead_code)]
840 fn missing(field: &'static str) -> Self {
841 Self { field: field.into(), kind: InvalidParamsErrorKind::MissingField }
842 }
843
844 #[allow(dead_code)]
845 fn invalid_value(field: &'static str, message: &'static str) -> Self {
846 Self { field: field.into(), kind: InvalidParamsErrorKind::InvalidValue { message }}
847 }
848 }
849
850 impl std::fmt::Display for InvalidParams {
851 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
852 match self.kind {
853 InvalidParamsErrorKind::MissingField => write!(f, "a required field was missing: `{}`", self.field),
854 InvalidParamsErrorKind::InvalidValue { message} => write!(f, "invalid value for field: `{}` - {}", self.field, message),
855 }
856 }
857 }
858
859 impl std::error::Error for InvalidParams { }
860
861mod internals;
862