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-northeast-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://transcribestreaming.ap-northeast-1.amazonaws.com");
43 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.ap-northeast-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-2".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://transcribestreaming.ap-northeast-2.amazonaws.com");
58 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.ap-northeast-2.amazonaws.com")
59 .build());
60 }
61
62 #[test]
64 fn test_3() {
65 let params = crate::config::endpoint::Params::builder()
66 .region("ap-southeast-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://transcribestreaming.ap-southeast-2.amazonaws.com");
73 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.ap-southeast-2.amazonaws.com")
74 .build());
75 }
76
77 #[test]
79 fn test_4() {
80 let params = crate::config::endpoint::Params::builder()
81 .region("ca-central-1".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://transcribestreaming.ca-central-1.amazonaws.com");
88 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.ca-central-1.amazonaws.com")
89 .build());
90 }
91
92 #[test]
94 fn test_5() {
95 let params = crate::config::endpoint::Params::builder()
96 .region("eu-central-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://transcribestreaming.eu-central-1.amazonaws.com");
103 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.eu-central-1.amazonaws.com")
104 .build());
105 }
106
107 #[test]
109 fn test_6() {
110 let params = crate::config::endpoint::Params::builder()
111 .region("eu-west-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://transcribestreaming.eu-west-1.amazonaws.com");
118 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.eu-west-1.amazonaws.com")
119 .build());
120 }
121
122 #[test]
124 fn test_7() {
125 let params = crate::config::endpoint::Params::builder()
126 .region("eu-west-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://transcribestreaming.eu-west-2.amazonaws.com");
133 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.eu-west-2.amazonaws.com")
134 .build());
135 }
136
137 #[test]
139 fn test_8() {
140 let params = crate::config::endpoint::Params::builder()
141 .region("sa-east-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://transcribestreaming.sa-east-1.amazonaws.com");
148 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.sa-east-1.amazonaws.com")
149 .build());
150 }
151
152 #[test]
154 fn test_9() {
155 let params = crate::config::endpoint::Params::builder()
156 .region("us-east-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://transcribestreaming.us-east-1.amazonaws.com");
163 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.us-east-1.amazonaws.com")
164 .build());
165 }
166
167 #[test]
169 fn test_10() {
170 let params = crate::config::endpoint::Params::builder()
171 .region("us-east-2".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://transcribestreaming.us-east-2.amazonaws.com");
178 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.us-east-2.amazonaws.com")
179 .build());
180 }
181
182 #[test]
184 fn test_11() {
185 let params = crate::config::endpoint::Params::builder()
186 .region("us-west-2".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://transcribestreaming.us-west-2.amazonaws.com");
193 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.us-west-2.amazonaws.com")
194 .build());
195 }
196
197 #[test]
199 fn test_12() {
200 let params = crate::config::endpoint::Params::builder()
201 .region("us-east-1".to_string())
202 .use_fips(true)
203 .use_dual_stack(true)
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://transcribestreaming-fips.us-east-1.api.aws");
208 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming-fips.us-east-1.api.aws")
209 .build());
210 }
211
212 #[test]
214 fn test_13() {
215 let params = crate::config::endpoint::Params::builder()
216 .region("us-east-1".to_string())
217 .use_fips(true)
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://transcribestreaming-fips.us-east-1.amazonaws.com");
223 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming-fips.us-east-1.amazonaws.com")
224 .build());
225 }
226
227 #[test]
229 fn test_14() {
230 let params = crate::config::endpoint::Params::builder()
231 .region("us-east-1".to_string())
232 .use_fips(false)
233 .use_dual_stack(true)
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://transcribestreaming.us-east-1.api.aws");
238 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.us-east-1.api.aws")
239 .build());
240 }
241
242 #[test]
244 fn test_15() {
245 let params = crate::config::endpoint::Params::builder()
246 .region("cn-north-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://transcribestreaming.cn-north-1.amazonaws.com.cn");
253 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.cn-north-1.amazonaws.com.cn")
254 .build());
255 }
256
257 #[test]
259 fn test_16() {
260 let params = crate::config::endpoint::Params::builder()
261 .region("cn-northwest-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://transcribestreaming.cn-northwest-1.amazonaws.com.cn");
268 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.cn-northwest-1.amazonaws.com.cn")
269 .build());
270 }
271
272 #[test]
274 fn test_17() {
275 let params = crate::config::endpoint::Params::builder()
276 .region("cn-north-1".to_string())
277 .use_fips(true)
278 .use_dual_stack(true)
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://transcribestreaming-fips.cn-north-1.api.amazonwebservices.com.cn");
283 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming-fips.cn-north-1.api.amazonwebservices.com.cn")
284 .build());
285 }
286
287 #[test]
289 fn test_18() {
290 let params = crate::config::endpoint::Params::builder()
291 .region("cn-north-1".to_string())
292 .use_fips(true)
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://transcribestreaming-fips.cn-north-1.amazonaws.com.cn");
298 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming-fips.cn-north-1.amazonaws.com.cn")
299 .build());
300 }
301
302 #[test]
304 fn test_19() {
305 let params = crate::config::endpoint::Params::builder()
306 .region("cn-north-1".to_string())
307 .use_fips(false)
308 .use_dual_stack(true)
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://transcribestreaming.cn-north-1.api.amazonwebservices.com.cn");
313 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.cn-north-1.api.amazonwebservices.com.cn")
314 .build());
315 }
316
317 #[test]
319 fn test_20() {
320 let params = crate::config::endpoint::Params::builder()
321 .region("us-gov-east-1".to_string())
322 .use_fips(false)
323 .use_dual_stack(false)
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://transcribestreaming.us-gov-east-1.amazonaws.com");
328 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.us-gov-east-1.amazonaws.com")
329 .build());
330 }
331
332 #[test]
334 fn test_21() {
335 let params = crate::config::endpoint::Params::builder()
336 .region("us-gov-west-1".to_string())
337 .use_fips(false)
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://transcribestreaming.us-gov-west-1.amazonaws.com");
343 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.us-gov-west-1.amazonaws.com")
344 .build());
345 }
346
347 #[test]
349 fn test_22() {
350 let params = crate::config::endpoint::Params::builder()
351 .region("us-gov-east-1".to_string())
352 .use_fips(true)
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://transcribestreaming-fips.us-gov-east-1.api.aws");
358 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming-fips.us-gov-east-1.api.aws")
359 .build());
360 }
361
362 #[test]
364 fn test_23() {
365 let params = crate::config::endpoint::Params::builder()
366 .region("us-gov-east-1".to_string())
367 .use_fips(true)
368 .use_dual_stack(false)
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://transcribestreaming-fips.us-gov-east-1.amazonaws.com");
373 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming-fips.us-gov-east-1.amazonaws.com")
374 .build());
375 }
376
377 #[test]
379 fn test_24() {
380 let params = crate::config::endpoint::Params::builder()
381 .region("us-gov-east-1".to_string())
382 .use_fips(false)
383 .use_dual_stack(true)
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://transcribestreaming.us-gov-east-1.api.aws");
388 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.us-gov-east-1.api.aws")
389 .build());
390 }
391
392 #[test]
394 fn test_25() {
395 let params = crate::config::endpoint::Params::builder()
396 .region("us-iso-east-1".to_string())
397 .use_fips(false)
398 .use_dual_stack(false)
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://transcribestreaming.us-iso-east-1.c2s.ic.gov");
403 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.us-iso-east-1.c2s.ic.gov")
404 .build());
405 }
406
407 #[test]
409 fn test_26() {
410 let params = crate::config::endpoint::Params::builder()
411 .region("us-iso-east-1".to_string())
412 .use_fips(true)
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://transcribestreaming-fips.us-iso-east-1.c2s.ic.gov");
418 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming-fips.us-iso-east-1.c2s.ic.gov")
419 .build());
420 }
421
422 #[test]
424 fn test_27() {
425 let params = crate::config::endpoint::Params::builder()
426 .region("us-isob-east-1".to_string())
427 .use_fips(true)
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://transcribestreaming-fips.us-isob-east-1.sc2s.sgov.gov");
433 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming-fips.us-isob-east-1.sc2s.sgov.gov")
434 .build());
435 }
436
437 #[test]
439 fn test_28() {
440 let params = crate::config::endpoint::Params::builder()
441 .region("us-isob-east-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://transcribestreaming.us-isob-east-1.sc2s.sgov.gov");
448 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://transcribestreaming.us-isob-east-1.sc2s.sgov.gov")
449 .build());
450 }
451
452 #[test]
454 fn test_29() {
455 let params = crate::config::endpoint::Params::builder()
456 .region("us-east-1".to_string())
457 .use_fips(false)
458 .use_dual_stack(false)
459 .endpoint("https://example.com".to_string())
460 .build().expect("invalid params");
461 let resolver = crate::config::endpoint::DefaultResolver::new();
462 let endpoint = resolver.resolve_endpoint(¶ms);
463 let endpoint = endpoint.expect("Expected valid endpoint: https://example.com");
464 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://example.com")
465 .build());
466 }
467
468 #[test]
470 fn test_30() {
471 let params = crate::config::endpoint::Params::builder()
472 .use_fips(false)
473 .use_dual_stack(false)
474 .endpoint("https://example.com".to_string())
475 .build().expect("invalid params");
476 let resolver = crate::config::endpoint::DefaultResolver::new();
477 let endpoint = resolver.resolve_endpoint(¶ms);
478 let endpoint = endpoint.expect("Expected valid endpoint: https://example.com");
479 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://example.com")
480 .build());
481 }
482
483 #[test]
485 fn test_31() {
486 let params = crate::config::endpoint::Params::builder()
487 .region("us-east-1".to_string())
488 .use_fips(true)
489 .use_dual_stack(false)
490 .endpoint("https://example.com".to_string())
491 .build().expect("invalid params");
492 let resolver = crate::config::endpoint::DefaultResolver::new();
493 let endpoint = resolver.resolve_endpoint(¶ms);
494 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]");
495 assert_eq!(format!("{}", error), "Invalid Configuration: FIPS and custom endpoint are not supported")
496 }
497
498 #[test]
500 fn test_32() {
501 let params = crate::config::endpoint::Params::builder()
502 .region("us-east-1".to_string())
503 .use_fips(false)
504 .use_dual_stack(true)
505 .endpoint("https://example.com".to_string())
506 .build().expect("invalid params");
507 let resolver = crate::config::endpoint::DefaultResolver::new();
508 let endpoint = resolver.resolve_endpoint(¶ms);
509 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]");
510 assert_eq!(format!("{}", error), "Invalid Configuration: Dualstack and custom endpoint are not supported")
511 }
512
513 #[test]
515 fn test_33() {
516 let params = crate::config::endpoint::Params::builder()
517 .build().expect("invalid params");
518 let resolver = crate::config::endpoint::DefaultResolver::new();
519 let endpoint = resolver.resolve_endpoint(¶ms);
520 let error = endpoint.expect_err("expected error: Invalid Configuration: Missing Region [Missing region]");
521 assert_eq!(format!("{}", error), "Invalid Configuration: Missing Region")
522 }
523
524
525}
526
527pub trait ResolveEndpoint: ::std::marker::Send + ::std::marker::Sync + ::std::fmt::Debug {
529 fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a>;
531
532 fn into_shared_resolver(self) -> ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver
536 where
537 Self: Sized + 'static,
538 {
539 ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver::new(DowncastParams(self))
540 }
541 }
542
543 #[derive(Debug)]
544 struct DowncastParams<T>(T);
545 impl<T> ::aws_smithy_runtime_api::client::endpoint::ResolveEndpoint for DowncastParams<T>
546 where
547 T: ResolveEndpoint,
548 {
549 fn resolve_endpoint<'a>(&'a self, params: &'a ::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a> {
550 let ep = match params.get::<crate::config::endpoint::Params>() {
551 Some(params) => self.0.resolve_endpoint(params),
552 None => ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(Err("params of expected type was not present".into())),
553 };
554 ep
555 }
556
557 }
558
559#[derive(Debug)]
560 pub struct DefaultResolver {
562 partition_resolver: &'static crate::endpoint_lib::partition::PartitionResolver,
563 endpoint_cache: ::arc_swap::ArcSwap<::std::option::Option<(Params, ::aws_smithy_types::endpoint::Endpoint)>>,
564 }
565
566 impl Default for DefaultResolver {
567 fn default() -> Self {
568 Self::new()
569 }
570 }
571
572 impl DefaultResolver {
573 pub fn new() -> Self {
575 Self {
576 partition_resolver: &crate::endpoint_lib::DEFAULT_PARTITION_RESOLVER,
577 endpoint_cache: ::arc_swap::ArcSwap::from_pointee(None),
578 }
579 }
580
581 #[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)]
582 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> {
583 let mut _diagnostic_collector = crate::endpoint_lib::diagnostic::DiagnosticCollector::new();
584 #[allow(unused_mut)]
585 let mut context = ConditionContext::default();
586
587 let region = ¶ms.region;
589let use_dual_stack = ¶ms.use_dual_stack;
590let use_fips = ¶ms.use_fips;
591let endpoint = ¶ms.endpoint;
592
593 let mut current_ref: i32 = 2;
594 loop {
595 match current_ref {
596 ref_val if ref_val >= 100_000_000 => {
597 return match (ref_val - 100_000_000) as usize {
598 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),
5991 => {
600
601 ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("Invalid Configuration: FIPS and custom endpoint are not supported"
602.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
603 },
6042 => {
605
606 ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("Invalid Configuration: Dualstack and custom endpoint are not supported"
607.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
608 },
6093 => {
610 let endpoint = params.endpoint.as_deref().unwrap_or_default();
611 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url(endpoint.to_owned())
612.build())
613 },
6144 => {
615 let region = params.region.as_deref().unwrap_or_default();
616let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
617 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
618out.push_str("https://transcribestreaming-fips.");
619#[allow(clippy::needless_borrow)]
620out.push_str(®ion.as_ref());
621out.push_str(".");
622#[allow(clippy::needless_borrow)]
623out.push_str(&partition_result.dual_stack_dns_suffix());
624out })
625.build())
626 },
6275 => {
628
629 ::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"
630.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
631 },
6326 => {
633 let region = params.region.as_deref().unwrap_or_default();
634let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
635 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
636out.push_str("https://transcribestreaming-fips.");
637#[allow(clippy::needless_borrow)]
638out.push_str(®ion.as_ref());
639out.push_str(".");
640#[allow(clippy::needless_borrow)]
641out.push_str(&partition_result.dns_suffix());
642out })
643.build())
644 },
6457 => {
646
647 ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("FIPS is enabled but this partition does not support FIPS"
648.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
649 },
6508 => {
651 let region = params.region.as_deref().unwrap_or_default();
652let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
653 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
654out.push_str("https://transcribestreaming.");
655#[allow(clippy::needless_borrow)]
656out.push_str(®ion.as_ref());
657out.push_str(".");
658#[allow(clippy::needless_borrow)]
659out.push_str(&partition_result.dual_stack_dns_suffix());
660out })
661.build())
662 },
6639 => {
664
665 ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("DualStack is enabled but this partition does not support DualStack"
666.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
667 },
66810 => {
669 let region = params.region.as_deref().unwrap_or_default();
670let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
671 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
672out.push_str("https://transcribestreaming.");
673#[allow(clippy::needless_borrow)]
674out.push_str(®ion.as_ref());
675out.push_str(".");
676#[allow(clippy::needless_borrow)]
677out.push_str(&partition_result.dns_suffix());
678out })
679.build())
680 },
68111 => {
682
683 ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("Invalid Configuration: Missing Region"
684.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
685 },
686 _ => ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("No endpoint rule matched")) as ::aws_smithy_runtime_api::box_error::BoxError),
687 };
688 }
689 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),
690 ref_val => {
691 let is_complement = ref_val < 0;
692 let node = &NODES[(ref_val.unsigned_abs() as usize) - 1];
693 let condition_result = match node.condition_index {
694 0 => endpoint.is_some(),
6951 => region.is_some(),
6962 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
697 let partition_result = &mut context.partition_result;
698 let partition_resolver = &self.partition_resolver;
699 {
700 *partition_result = partition_resolver.resolve_partition(if let Some(param) = region{
701 param
702 } else {
703 return false
704 }, _diagnostic_collector).map(|inner| inner.into());
705 partition_result.is_some()
706}
707 })(&mut _diagnostic_collector),
7083 => (use_fips) == (&true),
7094 => (use_dual_stack) == (&true),
7105 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
711 let partition_result = & context.partition_result;
712 let partition_resolver = &self.partition_resolver;
713 (if let Some(inner) = partition_result {
714 inner.supports_dual_stack()
715}else{
716 return false
717})
718==
719(true)
720 })(&mut _diagnostic_collector),
7216 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
722 let partition_result = & context.partition_result;
723 let partition_resolver = &self.partition_resolver;
724 (if let Some(inner) = partition_result {
725 inner.supports_fips()
726}else{
727 return false
728})
729==
730(true)
731 })(&mut _diagnostic_collector),
732 _ => unreachable!("Invalid condition index"),
733 };
734 current_ref = if is_complement ^ condition_result { node.high_ref } else { node.low_ref };
735 }
736 }
737 }
738 }
739 }
740
741 impl crate::config::endpoint::ResolveEndpoint for DefaultResolver {
742 fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a> {
743 let cached = self.endpoint_cache.load();
745 if let Some((cached_params, cached_endpoint)) = cached.as_ref() {
746 if cached_params == params {
747 return ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(::std::result::Result::Ok(cached_endpoint.clone()));
748 }
749 }
750 drop(cached);
751 let result = self.resolve_endpoint(params);
752 if let ::std::result::Result::Ok(ref endpoint) = result {
753 self.endpoint_cache.store(::std::sync::Arc::new(Some((params.clone(), endpoint.clone()))));
754 }
755 ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(result)
756 }
757 }
758 const NODES: [crate::endpoint_lib::bdd_interpreter::BddNode; 13] = [
759crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: -1, high_ref: 1, low_ref: -1 },
760crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 0, high_ref: 12, low_ref: 3 },
761crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 1, high_ref: 4, low_ref: 100000011 },
762crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 2, high_ref: 5, low_ref: 100000011 },
763crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 3, high_ref: 8, low_ref: 6 },
764crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 4, high_ref: 7, low_ref: 100000010 },
765crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 5, high_ref: 100000008, low_ref: 100000009 },
766crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 4, high_ref: 10, low_ref: 9 },
767crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 6, high_ref: 100000006, low_ref: 100000007 },
768crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 5, high_ref: 11, low_ref: 100000005 },
769crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 6, high_ref: 100000004, low_ref: 100000005 },
770crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 3, high_ref: 100000001, low_ref: 13 },
771crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 4, high_ref: 100000002, low_ref: 100000003 }
772];
773 #[derive(Default)]
776#[allow(unused_lifetimes)]
777pub(crate) struct ConditionContext<'a> {
778 pub(crate) partition_result: Option<crate::endpoint_lib::partition::Partition<'a>>,
779 phantom: std::marker::PhantomData<&'a ()>
781}
782
783#[non_exhaustive]
784#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
785pub struct Params {
787 pub(crate) region: ::std::option::Option<::std::string::String>,
789 pub(crate) use_dual_stack: bool,
791 pub(crate) use_fips: bool,
793 pub(crate) endpoint: ::std::option::Option<::std::string::String>,
795}
796impl Params {
797 pub fn builder() -> crate::config::endpoint::ParamsBuilder {
799 crate::config::endpoint::ParamsBuilder::default()
800 }
801 pub fn region(&self) -> ::std::option::Option<&str> {
803 self.region.as_deref()
804 }
805 pub fn use_dual_stack(&self) -> ::std::option::Option<bool> {
807 Some(self.use_dual_stack)
808 }
809 pub fn use_fips(&self) -> ::std::option::Option<bool> {
811 Some(self.use_fips)
812 }
813 pub fn endpoint(&self) -> ::std::option::Option<&str> {
815 self.endpoint.as_deref()
816 }
817}
818
819#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
821pub struct ParamsBuilder {
822 region: ::std::option::Option<::std::string::String>,
823 use_dual_stack: ::std::option::Option<bool>,
824 use_fips: ::std::option::Option<bool>,
825 endpoint: ::std::option::Option<::std::string::String>,
826}
827impl ParamsBuilder {
828 pub fn build(self) -> ::std::result::Result<crate::config::endpoint::Params, crate::config::endpoint::InvalidParams> {
830 if let Some(region) = &self.region {
831 if !crate::endpoint_lib::host::is_valid_host_label(region.as_ref() as &str, true, &mut crate::endpoint_lib::diagnostic::DiagnosticCollector::new()) {
832 return Err(crate::config::endpoint::InvalidParams::invalid_value("region", "must be a valid host label"))
833 }
834 };
835 Ok(#[allow(clippy::unnecessary_lazy_evaluations)]
836 crate::config::endpoint::Params {
837 region: self.region
838 ,
839 use_dual_stack: self.use_dual_stack
840 .or_else(||Some(false))
841 .ok_or_else(||crate::config::endpoint::InvalidParams::missing("use_dual_stack"))?
842 ,
843 use_fips: self.use_fips
844 .or_else(||Some(false))
845 .ok_or_else(||crate::config::endpoint::InvalidParams::missing("use_fips"))?
846 ,
847 endpoint: self.endpoint
848 ,
849 })
850 }
851 pub fn region(mut self, value: impl Into<::std::string::String>) -> Self {
855 self.region = Some(value.into());
856 self
857 }
858
859 pub fn set_region(mut self, param: Option<::std::string::String>) -> Self {
863 self.region = param;
864 self
865 }
866 pub fn use_dual_stack(mut self, value: impl Into<bool>) -> Self {
871 self.use_dual_stack = Some(value.into());
872 self
873 }
874
875 pub fn set_use_dual_stack(mut self, param: Option<bool>) -> Self {
880 self.use_dual_stack = param;
881 self
882 }
883 pub fn use_fips(mut self, value: impl Into<bool>) -> Self {
888 self.use_fips = Some(value.into());
889 self
890 }
891
892 pub fn set_use_fips(mut self, param: Option<bool>) -> Self {
897 self.use_fips = param;
898 self
899 }
900 pub fn endpoint(mut self, value: impl Into<::std::string::String>) -> Self {
904 self.endpoint = Some(value.into());
905 self
906 }
907
908 pub fn set_endpoint(mut self, param: Option<::std::string::String>) -> Self {
912 self.endpoint = param;
913 self
914 }
915}
916
917#[derive(Debug)]
919 pub struct InvalidParams {
920 field: std::borrow::Cow<'static, str>,
921 kind: InvalidParamsErrorKind,
922 }
923
924 #[derive(Debug)]
926 enum InvalidParamsErrorKind {
927 MissingField,
928 InvalidValue {
929 message: &'static str,
930 }
931 }
932
933 impl InvalidParams {
934 #[allow(dead_code)]
935 fn missing(field: &'static str) -> Self {
936 Self { field: field.into(), kind: InvalidParamsErrorKind::MissingField }
937 }
938
939 #[allow(dead_code)]
940 fn invalid_value(field: &'static str, message: &'static str) -> Self {
941 Self { field: field.into(), kind: InvalidParamsErrorKind::InvalidValue { message }}
942 }
943 }
944
945 impl std::fmt::Display for InvalidParams {
946 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
947 match self.kind {
948 InvalidParamsErrorKind::MissingField => write!(f, "a required field was missing: `{}`", self.field),
949 InvalidParamsErrorKind::InvalidValue { message} => write!(f, "invalid value for field: `{}` - {}", self.field, message),
950 }
951 }
952 }
953
954 impl std::error::Error for InvalidParams { }
955