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 .is_control_plane(true)
37 .region("us-east-1".to_string())
38 .use_fips(false)
39 .use_dual_stack(false)
40 .build().expect("invalid params");
41 let resolver = crate::config::endpoint::DefaultResolver::new();
42 let endpoint = resolver.resolve_endpoint(¶ms);
43 let endpoint = endpoint.expect("Expected valid endpoint: https://signin.us-east-1.api.aws");
44 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://signin.us-east-1.api.aws")
45 .auth_scheme(::aws_smithy_types::endpoint::EndpointAuthScheme::with_capacity("sigv4", 2)
46 .put("signingName", "signin".to_string())
47 .put("signingRegion", "us-east-1".to_string())
48 )
49 .build());
50 }
51
52 #[test]
54 fn test_2() {
55 let params = crate::config::endpoint::Params::builder()
56 .is_control_plane(true)
57 .region("cn-north-1".to_string())
58 .use_fips(false)
59 .use_dual_stack(false)
60 .build().expect("invalid params");
61 let resolver = crate::config::endpoint::DefaultResolver::new();
62 let endpoint = resolver.resolve_endpoint(¶ms);
63 let endpoint = endpoint.expect("Expected valid endpoint: https://signin.cn-north-1.api.amazonwebservices.com.cn");
64 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://signin.cn-north-1.api.amazonwebservices.com.cn")
65 .auth_scheme(::aws_smithy_types::endpoint::EndpointAuthScheme::with_capacity("sigv4", 2)
66 .put("signingName", "signin".to_string())
67 .put("signingRegion", "cn-north-1".to_string())
68 )
69 .build());
70 }
71
72 #[test]
74 fn test_3() {
75 let params = crate::config::endpoint::Params::builder()
76 .is_control_plane(false)
77 .region("us-east-1".to_string())
78 .use_fips(false)
79 .use_dual_stack(false)
80 .build().expect("invalid params");
81 let resolver = crate::config::endpoint::DefaultResolver::new();
82 let endpoint = resolver.resolve_endpoint(¶ms);
83 let endpoint = endpoint.expect("Expected valid endpoint: https://us-east-1.signin.aws.amazon.com");
84 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://us-east-1.signin.aws.amazon.com")
85 .build());
86 }
87
88 #[test]
90 fn test_4() {
91 let params = crate::config::endpoint::Params::builder()
92 .region("us-east-1".to_string())
93 .use_fips(false)
94 .use_dual_stack(false)
95 .build().expect("invalid params");
96 let resolver = crate::config::endpoint::DefaultResolver::new();
97 let endpoint = resolver.resolve_endpoint(¶ms);
98 let endpoint = endpoint.expect("Expected valid endpoint: https://us-east-1.signin.aws.amazon.com");
99 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://us-east-1.signin.aws.amazon.com")
100 .build());
101 }
102
103 #[test]
105 fn test_5() {
106 let params = crate::config::endpoint::Params::builder()
107 .is_control_plane(false)
108 .region("cn-north-1".to_string())
109 .use_fips(false)
110 .use_dual_stack(false)
111 .build().expect("invalid params");
112 let resolver = crate::config::endpoint::DefaultResolver::new();
113 let endpoint = resolver.resolve_endpoint(¶ms);
114 let endpoint = endpoint.expect("Expected valid endpoint: https://cn-north-1.signin.amazonaws.cn");
115 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://cn-north-1.signin.amazonaws.cn")
116 .build());
117 }
118
119 #[test]
121 fn test_6() {
122 let params = crate::config::endpoint::Params::builder()
123 .is_control_plane(false)
124 .region("us-gov-west-1".to_string())
125 .use_fips(false)
126 .use_dual_stack(false)
127 .build().expect("invalid params");
128 let resolver = crate::config::endpoint::DefaultResolver::new();
129 let endpoint = resolver.resolve_endpoint(¶ms);
130 let endpoint = endpoint.expect("Expected valid endpoint: https://us-gov-west-1.signin.amazonaws-us-gov.com");
131 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://us-gov-west-1.signin.amazonaws-us-gov.com")
132 .build());
133 }
134
135 #[test]
137 fn test_7() {
138 let params = crate::config::endpoint::Params::builder()
139 .region("us-gov-west-1".to_string())
140 .use_fips(true)
141 .use_dual_stack(false)
142 .build().expect("invalid params");
143 let resolver = crate::config::endpoint::DefaultResolver::new();
144 let endpoint = resolver.resolve_endpoint(¶ms);
145 let endpoint = endpoint.expect("Expected valid endpoint: https://signin-fips.amazonaws-us-gov.com");
146 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://signin-fips.amazonaws-us-gov.com")
147 .build());
148 }
149
150 #[test]
152 fn test_8() {
153 let params = crate::config::endpoint::Params::builder()
154 .region("us-gov-east-1".to_string())
155 .use_fips(true)
156 .use_dual_stack(false)
157 .build().expect("invalid params");
158 let resolver = crate::config::endpoint::DefaultResolver::new();
159 let endpoint = resolver.resolve_endpoint(¶ms);
160 let endpoint = endpoint.expect("Expected valid endpoint: https://us-gov-east-1.signin-fips.amazonaws-us-gov.com");
161 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://us-gov-east-1.signin-fips.amazonaws-us-gov.com")
162 .build());
163 }
164
165 #[test]
167 fn test_9() {
168 let params = crate::config::endpoint::Params::builder()
169 .region("us-east-1".to_string())
170 .use_fips(true)
171 .use_dual_stack(false)
172 .build().expect("invalid params");
173 let resolver = crate::config::endpoint::DefaultResolver::new();
174 let endpoint = resolver.resolve_endpoint(¶ms);
175 let endpoint = endpoint.expect("Expected valid endpoint: https://signin-fips.us-east-1.amazonaws.com");
176 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://signin-fips.us-east-1.amazonaws.com")
177 .build());
178 }
179
180 #[test]
182 fn test_10() {
183 let params = crate::config::endpoint::Params::builder()
184 .region("us-east-1".to_string())
185 .use_fips(false)
186 .use_dual_stack(true)
187 .build().expect("invalid params");
188 let resolver = crate::config::endpoint::DefaultResolver::new();
189 let endpoint = resolver.resolve_endpoint(¶ms);
190 let endpoint = endpoint.expect("Expected valid endpoint: https://signin.us-east-1.api.aws");
191 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://signin.us-east-1.api.aws")
192 .build());
193 }
194
195 #[test]
197 fn test_11() {
198 let params = crate::config::endpoint::Params::builder()
199 .region("cn-north-1".to_string())
200 .use_fips(false)
201 .use_dual_stack(true)
202 .build().expect("invalid params");
203 let resolver = crate::config::endpoint::DefaultResolver::new();
204 let endpoint = resolver.resolve_endpoint(¶ms);
205 let endpoint = endpoint.expect("Expected valid endpoint: https://signin.cn-north-1.api.amazonwebservices.com.cn");
206 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://signin.cn-north-1.api.amazonwebservices.com.cn")
207 .build());
208 }
209
210 #[test]
212 fn test_12() {
213 let params = crate::config::endpoint::Params::builder()
214 .region("us-gov-west-1".to_string())
215 .use_fips(false)
216 .use_dual_stack(true)
217 .build().expect("invalid params");
218 let resolver = crate::config::endpoint::DefaultResolver::new();
219 let endpoint = resolver.resolve_endpoint(¶ms);
220 let endpoint = endpoint.expect("Expected valid endpoint: https://signin.us-gov-west-1.api.aws");
221 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://signin.us-gov-west-1.api.aws")
222 .build());
223 }
224
225 #[test]
227 fn test_13() {
228 let params = crate::config::endpoint::Params::builder()
229 .region("us-east-1".to_string())
230 .endpoint("https://custom.signin.example.com".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://custom.signin.example.com");
237 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://custom.signin.example.com")
238 .build());
239 }
240
241 #[test]
243 fn test_14() {
244 let params = crate::config::endpoint::Params::builder()
245 .region("us-iso-east-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://us-iso-east-1.signin.c2shome.ic.gov");
252 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://us-iso-east-1.signin.c2shome.ic.gov")
253 .build());
254 }
255
256 #[test]
258 fn test_15() {
259 let params = crate::config::endpoint::Params::builder()
260 .region("us-isob-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://us-isob-east-1.signin.sc2shome.sgov.gov");
267 assert_eq!(endpoint, ::aws_smithy_types::endpoint::Endpoint::builder().url("https://us-isob-east-1.signin.sc2shome.sgov.gov")
268 .build());
269 }
270
271
272}
273
274pub trait ResolveEndpoint: ::std::marker::Send + ::std::marker::Sync + ::std::fmt::Debug {
276 fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a>;
278
279 fn into_shared_resolver(self) -> ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver
283 where
284 Self: Sized + 'static,
285 {
286 ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver::new(DowncastParams(self))
287 }
288 }
289
290 #[derive(Debug)]
291 struct DowncastParams<T>(T);
292 impl<T> ::aws_smithy_runtime_api::client::endpoint::ResolveEndpoint for DowncastParams<T>
293 where
294 T: ResolveEndpoint,
295 {
296 fn resolve_endpoint<'a>(&'a self, params: &'a ::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a> {
297 let ep = match params.get::<crate::config::endpoint::Params>() {
298 Some(params) => self.0.resolve_endpoint(params),
299 None => ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(Err("params of expected type was not present".into())),
300 };
301 ep
302 }
303
304 }
305
306#[derive(Debug)]
307 pub struct DefaultResolver {
309 partition_resolver: &'static crate::endpoint_lib::partition::PartitionResolver,
310 endpoint_cache: ::arc_swap::ArcSwap<::std::option::Option<(Params, ::aws_smithy_types::endpoint::Endpoint)>>,
311 }
312
313 impl Default for DefaultResolver {
314 fn default() -> Self {
315 Self::new()
316 }
317 }
318
319 impl DefaultResolver {
320 pub fn new() -> Self {
322 Self {
323 partition_resolver: &crate::endpoint_lib::DEFAULT_PARTITION_RESOLVER,
324 endpoint_cache: ::arc_swap::ArcSwap::from_pointee(None),
325 }
326 }
327
328 #[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)]
329 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> {
330 let mut _diagnostic_collector = crate::endpoint_lib::diagnostic::DiagnosticCollector::new();
331 #[allow(unused_mut)]
332 let mut context = ConditionContext::default();
333
334 let use_dual_stack = ¶ms.use_dual_stack;
336let use_fips = ¶ms.use_fips;
337let endpoint = ¶ms.endpoint;
338let region = ¶ms.region;
339let is_control_plane = ¶ms.is_control_plane;
340
341 let mut current_ref: i32 = 2;
342 loop {
343 match current_ref {
344 ref_val if ref_val >= 100_000_000 => {
345 return match (ref_val - 100_000_000) as usize {
346 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),
3471 => {
348 let region = params.region.as_deref().unwrap_or_default();
349 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
350out.push_str("https://signin.");
351#[allow(clippy::needless_borrow)]
352out.push_str(®ion.as_ref());
353out.push_str(".api.aws");
354out })
355.auth_scheme(::aws_smithy_types::endpoint::EndpointAuthScheme::with_capacity("sigv4"
356.to_string(), 2)
357.put("signingName", "signin")
358.put("signingRegion", region.as_ref())
359)
360.build())
361 },
3622 => {
363 let region = params.region.as_deref().unwrap_or_default();
364 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
365out.push_str("https://signin.");
366#[allow(clippy::needless_borrow)]
367out.push_str(®ion.as_ref());
368out.push_str(".api.amazonwebservices.com.cn");
369out })
370.auth_scheme(::aws_smithy_types::endpoint::EndpointAuthScheme::with_capacity("sigv4"
371.to_string(), 2)
372.put("signingName", "signin")
373.put("signingRegion", region.as_ref())
374)
375.build())
376 },
3773 => {
378 let region = params.region.as_deref().unwrap_or_default();
379let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
380 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
381out.push_str("https://signin.");
382#[allow(clippy::needless_borrow)]
383out.push_str(®ion.as_ref());
384out.push_str(".");
385#[allow(clippy::needless_borrow)]
386out.push_str(&partition_result.dual_stack_dns_suffix());
387out })
388.auth_scheme(::aws_smithy_types::endpoint::EndpointAuthScheme::with_capacity("sigv4"
389.to_string(), 2)
390.put("signingName", "signin")
391.put("signingRegion", region.as_ref())
392)
393.build())
394 },
3954 => {
396 let region = params.region.as_deref().unwrap_or_default();
397 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
398out.push_str("https://");
399#[allow(clippy::needless_borrow)]
400out.push_str(®ion.as_ref());
401out.push_str(".signin.aws.amazon.com");
402out })
403.build())
404 },
4055 => {
406 let region = params.region.as_deref().unwrap_or_default();
407 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
408out.push_str("https://");
409#[allow(clippy::needless_borrow)]
410out.push_str(®ion.as_ref());
411out.push_str(".signin.amazonaws.cn");
412out })
413.build())
414 },
4156 => {
416 let region = params.region.as_deref().unwrap_or_default();
417 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
418out.push_str("https://");
419#[allow(clippy::needless_borrow)]
420out.push_str(®ion.as_ref());
421out.push_str(".signin.amazonaws-us-gov.com");
422out })
423.build())
424 },
4257 => {
426 let region = params.region.as_deref().unwrap_or_default();
427 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
428out.push_str("https://");
429#[allow(clippy::needless_borrow)]
430out.push_str(®ion.as_ref());
431out.push_str(".signin.c2shome.ic.gov");
432out })
433.build())
434 },
4358 => {
436 let region = params.region.as_deref().unwrap_or_default();
437 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
438out.push_str("https://");
439#[allow(clippy::needless_borrow)]
440out.push_str(®ion.as_ref());
441out.push_str(".signin.sc2shome.sgov.gov");
442out })
443.build())
444 },
4459 => {
446 let region = params.region.as_deref().unwrap_or_default();
447 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
448out.push_str("https://");
449#[allow(clippy::needless_borrow)]
450out.push_str(®ion.as_ref());
451out.push_str(".signin.csphome.hci.ic.gov");
452out })
453.build())
454 },
45510 => {
456 let region = params.region.as_deref().unwrap_or_default();
457 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
458out.push_str("https://");
459#[allow(clippy::needless_borrow)]
460out.push_str(®ion.as_ref());
461out.push_str(".signin.csphome.adc-e.uk");
462out })
463.build())
464 },
46511 => {
466 let region = params.region.as_deref().unwrap_or_default();
467 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
468out.push_str("https://");
469#[allow(clippy::needless_borrow)]
470out.push_str(®ion.as_ref());
471out.push_str(".signin.amazonaws-eusc.eu");
472out })
473.build())
474 },
47512 => {
476
477 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url("https://signin-fips.amazonaws-us-gov.com"
478.to_string())
479.build())
480 },
48113 => {
482 let region = params.region.as_deref().unwrap_or_default();
483 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
484out.push_str("https://");
485#[allow(clippy::needless_borrow)]
486out.push_str(®ion.as_ref());
487out.push_str(".signin-fips.amazonaws-us-gov.com");
488out })
489.build())
490 },
49114 => {
492 let region = params.region.as_deref().unwrap_or_default();
493let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
494 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
495out.push_str("https://");
496#[allow(clippy::needless_borrow)]
497out.push_str(®ion.as_ref());
498out.push_str(".signin.");
499#[allow(clippy::needless_borrow)]
500out.push_str(&partition_result.dns_suffix());
501out })
502.build())
503 },
50415 => {
505
506 ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("Invalid Configuration: FIPS and custom endpoint are not supported"
507.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
508 },
50916 => {
510
511 ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("Invalid Configuration: Dualstack and custom endpoint are not supported"
512.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
513 },
51417 => {
515 let endpoint = params.endpoint.as_deref().unwrap_or_default();
516 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url(endpoint.to_owned())
517.build())
518 },
51918 => {
520 let region = params.region.as_deref().unwrap_or_default();
521let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
522 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
523out.push_str("https://signin-fips.");
524#[allow(clippy::needless_borrow)]
525out.push_str(®ion.as_ref());
526out.push_str(".");
527#[allow(clippy::needless_borrow)]
528out.push_str(&partition_result.dual_stack_dns_suffix());
529out })
530.build())
531 },
53219 => {
533
534 ::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"
535.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
536 },
53720 => {
538 let region = params.region.as_deref().unwrap_or_default();
539let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
540 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
541out.push_str("https://signin-fips.");
542#[allow(clippy::needless_borrow)]
543out.push_str(®ion.as_ref());
544out.push_str(".");
545#[allow(clippy::needless_borrow)]
546out.push_str(&partition_result.dns_suffix());
547out })
548.build())
549 },
55021 => {
551
552 ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("FIPS is enabled but this partition does not support FIPS"
553.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
554 },
55522 => {
556 let region = params.region.as_deref().unwrap_or_default();
557let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
558 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
559out.push_str("https://signin.");
560#[allow(clippy::needless_borrow)]
561out.push_str(®ion.as_ref());
562out.push_str(".");
563#[allow(clippy::needless_borrow)]
564out.push_str(&partition_result.dual_stack_dns_suffix());
565out })
566.build())
567 },
56823 => {
569
570 ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("DualStack is enabled but this partition does not support DualStack"
571.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
572 },
57324 => {
574 let region = params.region.as_deref().unwrap_or_default();
575let partition_result = context.partition_result.as_ref().expect("Guaranteed to have a value by earlier checks.");
576 ::std::result::Result::Ok(::aws_smithy_types::endpoint::Endpoint::builder().url({ let mut out = String::new();
577out.push_str("https://signin.");
578#[allow(clippy::needless_borrow)]
579out.push_str(®ion.as_ref());
580out.push_str(".");
581#[allow(clippy::needless_borrow)]
582out.push_str(&partition_result.dns_suffix());
583out })
584.build())
585 },
58625 => {
587
588 ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("Invalid Configuration: Missing Region"
589.to_string())) as ::aws_smithy_runtime_api::box_error::BoxError)
590 },
591 _ => ::std::result::Result::Err(Box::new(::aws_smithy_http::endpoint::ResolveEndpointError::message("No endpoint rule matched")) as ::aws_smithy_runtime_api::box_error::BoxError),
592 };
593 }
594 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),
595 ref_val => {
596 let is_complement = ref_val < 0;
597 let node = &NODES[(ref_val.unsigned_abs() as usize) - 1];
598 let condition_result = match node.condition_index {
599 0 => region.is_some(),
6001 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
601
602 let partition_resolver = &self.partition_resolver;
603 (crate::endpoint_lib::coalesce::coalesce!(is_control_plane.clone()
604,false))
605==
606(true)
607 })(&mut _diagnostic_collector),
6082 => endpoint.is_some(),
6093 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
610 let partition_result = &mut context.partition_result;
611 let partition_resolver = &self.partition_resolver;
612 {
613 *partition_result = partition_resolver.resolve_partition(if let Some(param) = region{
614 param
615 } else {
616 return false
617 }, _diagnostic_collector).map(|inner| inner.into());
618 partition_result.is_some()
619}
620 })(&mut _diagnostic_collector),
6214 => (use_fips) == (&true),
6225 => (use_dual_stack) == (&true),
6236 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
624 let partition_result = & context.partition_result;
625 let partition_resolver = &self.partition_resolver;
626 (if let Some(inner) = partition_result {
627 inner.name()
628}else{
629 return false
630})
631==
632("aws")
633 })(&mut _diagnostic_collector),
6347 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
635 let partition_result = & context.partition_result;
636 let partition_resolver = &self.partition_resolver;
637 (if let Some(inner) = partition_result {
638 inner.name()
639}else{
640 return false
641})
642==
643("aws-cn")
644 })(&mut _diagnostic_collector),
6458 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
646 let partition_result = & context.partition_result;
647 let partition_resolver = &self.partition_resolver;
648 (if let Some(inner) = partition_result {
649 inner.supports_dual_stack()
650}else{
651 return false
652})
653==
654(true)
655 })(&mut _diagnostic_collector),
6569 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
657
658 let partition_resolver = &self.partition_resolver;
659 (region)
660==
661&mut Some(
662 ("us-gov-west-1"
663 .to_string().into())
664)
665 })(&mut _diagnostic_collector),
66610 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
667 let partition_result = & context.partition_result;
668 let partition_resolver = &self.partition_resolver;
669 (if let Some(inner) = partition_result {
670 inner.name()
671}else{
672 return false
673})
674==
675("aws-us-gov")
676 })(&mut _diagnostic_collector),
67711 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
678 let partition_result = & context.partition_result;
679 let partition_resolver = &self.partition_resolver;
680 (if let Some(inner) = partition_result {
681 inner.supports_fips()
682}else{
683 return false
684})
685==
686(true)
687 })(&mut _diagnostic_collector),
68812 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
689 let partition_result = & context.partition_result;
690 let partition_resolver = &self.partition_resolver;
691 (if let Some(inner) = partition_result {
692 inner.name()
693}else{
694 return false
695})
696==
697("aws-iso")
698 })(&mut _diagnostic_collector),
69913 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
700 let partition_result = & context.partition_result;
701 let partition_resolver = &self.partition_resolver;
702 (if let Some(inner) = partition_result {
703 inner.name()
704}else{
705 return false
706})
707==
708("aws-iso-b")
709 })(&mut _diagnostic_collector),
71014 => (|_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.name()
715}else{
716 return false
717})
718==
719("aws-iso-f")
720 })(&mut _diagnostic_collector),
72115 => (|_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.name()
726}else{
727 return false
728})
729==
730("aws-iso-e")
731 })(&mut _diagnostic_collector),
73216 => (|_diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector| -> bool {
733 let partition_result = & context.partition_result;
734 let partition_resolver = &self.partition_resolver;
735 (if let Some(inner) = partition_result {
736 inner.name()
737}else{
738 return false
739})
740==
741("aws-eusc")
742 })(&mut _diagnostic_collector),
743 _ => unreachable!("Invalid condition index"),
744 };
745 current_ref = if is_complement ^ condition_result { node.high_ref } else { node.low_ref };
746 }
747 }
748 }
749 }
750 }
751
752 impl crate::config::endpoint::ResolveEndpoint for DefaultResolver {
753 fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a> {
754 let cached = self.endpoint_cache.load();
756 if let Some((cached_params, cached_endpoint)) = cached.as_ref() {
757 if cached_params == params {
758 return ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(::std::result::Result::Ok(cached_endpoint.clone()));
759 }
760 }
761 drop(cached);
762 let result = self.resolve_endpoint(params);
763 if let ::std::result::Result::Ok(ref endpoint) = result {
764 self.endpoint_cache.store(::std::sync::Arc::new(Some((params.clone(), endpoint.clone()))));
765 }
766 ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(result)
767 }
768 }
769 const NODES: [crate::endpoint_lib::bdd_interpreter::BddNode; 33] = [
770crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: -1, high_ref: 1, low_ref: -1 },
771crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 0, high_ref: 4, low_ref: 3 },
772crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 2, high_ref: 30, low_ref: 100000025 },
773crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 1, high_ref: 24, low_ref: 5 },
774crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 2, high_ref: 30, low_ref: 6 },
775crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 3, high_ref: 7, low_ref: 26 },
776crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 4, high_ref: 18, low_ref: 8 },
777crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 5, high_ref: 17, low_ref: 9 },
778crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 6, high_ref: 100000004, low_ref: 10 },
779crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 7, high_ref: 100000005, low_ref: 11 },
780crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 10, high_ref: 100000006, low_ref: 12 },
781crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 12, high_ref: 100000007, low_ref: 13 },
782crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 13, high_ref: 100000008, low_ref: 14 },
783crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 14, high_ref: 100000009, low_ref: 15 },
784crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 15, high_ref: 100000010, low_ref: 16 },
785crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 16, high_ref: 100000011, low_ref: 100000014 },
786crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 8, high_ref: 100000022, low_ref: 100000023 },
787crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 5, high_ref: 22, low_ref: 19 },
788crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 9, high_ref: 100000012, low_ref: 20 },
789crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 10, high_ref: 100000013, low_ref: 21 },
790crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 11, high_ref: 100000020, low_ref: 100000021 },
791crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 8, high_ref: 23, low_ref: 100000019 },
792crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 11, high_ref: 100000018, low_ref: 100000019 },
793crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 2, high_ref: 29, low_ref: 25 },
794crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 3, high_ref: 32, low_ref: 26 },
795crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 4, high_ref: 27, low_ref: 100000025 },
796crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 5, high_ref: 100000025, low_ref: 28 },
797crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 9, high_ref: 100000012, low_ref: 100000025 },
798crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 3, high_ref: 32, low_ref: 30 },
799crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 4, high_ref: 100000015, low_ref: 31 },
800crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 5, high_ref: 100000016, low_ref: 100000017 },
801crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 6, high_ref: 100000001, low_ref: 33 },
802crate::endpoint_lib::bdd_interpreter::BddNode { condition_index: 7, high_ref: 100000002, low_ref: 100000003 }
803];
804 #[derive(Default)]
807#[allow(unused_lifetimes)]
808pub(crate) struct ConditionContext<'a> {
809 pub(crate) partition_result: Option<crate::endpoint_lib::partition::Partition<'a>>,
810 phantom: std::marker::PhantomData<&'a ()>
812}
813
814#[non_exhaustive]
815#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
816pub struct Params {
818 pub(crate) use_dual_stack: bool,
820 pub(crate) use_fips: bool,
822 pub(crate) endpoint: ::std::option::Option<::std::string::String>,
824 pub(crate) region: ::std::option::Option<::std::string::String>,
826 pub(crate) is_control_plane: ::std::option::Option<bool>,
828}
829impl Params {
830 pub fn builder() -> crate::config::endpoint::ParamsBuilder {
832 crate::config::endpoint::ParamsBuilder::default()
833 }
834 pub fn use_dual_stack(&self) -> ::std::option::Option<bool> {
836 Some(self.use_dual_stack)
837 }
838 pub fn use_fips(&self) -> ::std::option::Option<bool> {
840 Some(self.use_fips)
841 }
842 pub fn endpoint(&self) -> ::std::option::Option<&str> {
844 self.endpoint.as_deref()
845 }
846 pub fn region(&self) -> ::std::option::Option<&str> {
848 self.region.as_deref()
849 }
850 pub fn is_control_plane(&self) -> ::std::option::Option<bool> {
852 self.is_control_plane
853 }
854}
855
856#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
858pub struct ParamsBuilder {
859 use_dual_stack: ::std::option::Option<bool>,
860 use_fips: ::std::option::Option<bool>,
861 endpoint: ::std::option::Option<::std::string::String>,
862 region: ::std::option::Option<::std::string::String>,
863 is_control_plane: ::std::option::Option<bool>,
864}
865impl ParamsBuilder {
866 pub fn build(self) -> ::std::result::Result<crate::config::endpoint::Params, crate::config::endpoint::InvalidParams> {
868 if let Some(region) = &self.region {
869 if !crate::endpoint_lib::host::is_valid_host_label(region.as_ref() as &str, true, &mut crate::endpoint_lib::diagnostic::DiagnosticCollector::new()) {
870 return Err(crate::config::endpoint::InvalidParams::invalid_value("region", "must be a valid host label"))
871 }
872 };
873 Ok(#[allow(clippy::unnecessary_lazy_evaluations)]
874 crate::config::endpoint::Params {
875 use_dual_stack: self.use_dual_stack
876 .or_else(||Some(false))
877 .ok_or_else(||crate::config::endpoint::InvalidParams::missing("use_dual_stack"))?
878 ,
879 use_fips: self.use_fips
880 .or_else(||Some(false))
881 .ok_or_else(||crate::config::endpoint::InvalidParams::missing("use_fips"))?
882 ,
883 endpoint: self.endpoint
884 ,
885 region: self.region
886 ,
887 is_control_plane: self.is_control_plane
888 ,
889 })
890 }
891 pub fn use_dual_stack(mut self, value: impl Into<bool>) -> Self {
896 self.use_dual_stack = Some(value.into());
897 self
898 }
899
900 pub fn set_use_dual_stack(mut self, param: Option<bool>) -> Self {
905 self.use_dual_stack = param;
906 self
907 }
908 pub fn use_fips(mut self, value: impl Into<bool>) -> Self {
913 self.use_fips = Some(value.into());
914 self
915 }
916
917 pub fn set_use_fips(mut self, param: Option<bool>) -> Self {
922 self.use_fips = param;
923 self
924 }
925 pub fn endpoint(mut self, value: impl Into<::std::string::String>) -> Self {
929 self.endpoint = Some(value.into());
930 self
931 }
932
933 pub fn set_endpoint(mut self, param: Option<::std::string::String>) -> Self {
937 self.endpoint = param;
938 self
939 }
940 pub fn region(mut self, value: impl Into<::std::string::String>) -> Self {
944 self.region = Some(value.into());
945 self
946 }
947
948 pub fn set_region(mut self, param: Option<::std::string::String>) -> Self {
952 self.region = param;
953 self
954 }
955 pub fn is_control_plane(mut self, value: impl Into<bool>) -> Self {
959 self.is_control_plane = Some(value.into());
960 self
961 }
962
963 pub fn set_is_control_plane(mut self, param: Option<bool>) -> Self {
967 self.is_control_plane = param;
968 self
969 }
970}
971
972#[derive(Debug)]
974 pub struct InvalidParams {
975 field: std::borrow::Cow<'static, str>,
976 kind: InvalidParamsErrorKind,
977 }
978
979 #[derive(Debug)]
981 enum InvalidParamsErrorKind {
982 MissingField,
983 InvalidValue {
984 message: &'static str,
985 }
986 }
987
988 impl InvalidParams {
989 #[allow(dead_code)]
990 fn missing(field: &'static str) -> Self {
991 Self { field: field.into(), kind: InvalidParamsErrorKind::MissingField }
992 }
993
994 #[allow(dead_code)]
995 fn invalid_value(field: &'static str, message: &'static str) -> Self {
996 Self { field: field.into(), kind: InvalidParamsErrorKind::InvalidValue { message }}
997 }
998 }
999
1000 impl std::fmt::Display for InvalidParams {
1001 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1002 match self.kind {
1003 InvalidParamsErrorKind::MissingField => write!(f, "a required field was missing: `{}`", self.field),
1004 InvalidParamsErrorKind::InvalidValue { message} => write!(f, "invalid value for field: `{}` - {}", self.field, message),
1005 }
1006 }
1007 }
1008
1009 impl std::error::Error for InvalidParams { }
1010