aws_sdk_simpledbv2/config/
endpoint.rs1pub use ::aws_smithy_runtime_api::client::endpoint::EndpointFuture;
3pub use ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver;
4pub use ::aws_smithy_types::endpoint::Endpoint;
5
6#[derive(Debug, Default)]
8pub(crate) struct EndpointOverrideFeatureTrackerInterceptor;
9
10impl ::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 .endpoint("https://example.com".to_string())
36 .use_fips(false)
37 .build()
38 .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://example.com");
42 assert_eq!(
43 endpoint,
44 ::aws_smithy_types::endpoint::Endpoint::builder().url("https://example.com").build()
45 );
46 }
47
48 #[test]
50 fn test_2() {
51 let params = crate::config::endpoint::Params::builder()
52 .endpoint("https://example.com".to_string())
53 .use_fips(true)
54 .build()
55 .expect("invalid params");
56 let resolver = crate::config::endpoint::DefaultResolver::new();
57 let endpoint = resolver.resolve_endpoint(¶ms);
58 let error = endpoint
59 .expect_err("expected error: Invalid Configuration: FIPS and custom endpoint are not supported [For custom endpoint with fips enabled]");
60 assert_eq!(format!("{}", error), "Invalid Configuration: FIPS and custom endpoint are not supported")
61 }
62
63 #[test]
65 fn test_3() {
66 let params = crate::config::endpoint::Params::builder()
67 .endpoint("https://example.com".to_string())
68 .use_fips(false)
69 .use_dual_stack(true)
70 .build()
71 .expect("invalid params");
72 let resolver = crate::config::endpoint::DefaultResolver::new();
73 let endpoint = resolver.resolve_endpoint(¶ms);
74 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]");
75 assert_eq!(
76 format!("{}", error),
77 "Invalid Configuration: Dualstack and custom endpoint are not supported"
78 )
79 }
80
81 #[test]
83 fn test_4() {
84 let params = crate::config::endpoint::Params::builder()
85 .region("us-east-1".to_string())
86 .use_fips(false)
87 .use_dual_stack(false)
88 .build()
89 .expect("invalid params");
90 let resolver = crate::config::endpoint::DefaultResolver::new();
91 let endpoint = resolver.resolve_endpoint(¶ms);
92 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb.amazonaws.com");
93 assert_eq!(
94 endpoint,
95 ::aws_smithy_types::endpoint::Endpoint::builder().url("https://sdb.amazonaws.com").build()
96 );
97 }
98
99 #[test]
101 fn test_5() {
102 let params = crate::config::endpoint::Params::builder()
103 .region("us-east-1".to_string())
104 .use_fips(true)
105 .use_dual_stack(true)
106 .build()
107 .expect("invalid params");
108 let resolver = crate::config::endpoint::DefaultResolver::new();
109 let endpoint = resolver.resolve_endpoint(¶ms);
110 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb-fips.us-east-1.api.aws");
111 assert_eq!(
112 endpoint,
113 ::aws_smithy_types::endpoint::Endpoint::builder()
114 .url("https://sdb-fips.us-east-1.api.aws")
115 .build()
116 );
117 }
118
119 #[test]
121 fn test_6() {
122 let params = crate::config::endpoint::Params::builder()
123 .region("us-east-1".to_string())
124 .use_fips(true)
125 .use_dual_stack(false)
126 .build()
127 .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://sdb-fips.us-east-1.amazonaws.com");
131 assert_eq!(
132 endpoint,
133 ::aws_smithy_types::endpoint::Endpoint::builder()
134 .url("https://sdb-fips.us-east-1.amazonaws.com")
135 .build()
136 );
137 }
138
139 #[test]
141 fn test_7() {
142 let params = crate::config::endpoint::Params::builder()
143 .region("us-east-1".to_string())
144 .use_fips(false)
145 .use_dual_stack(true)
146 .build()
147 .expect("invalid params");
148 let resolver = crate::config::endpoint::DefaultResolver::new();
149 let endpoint = resolver.resolve_endpoint(¶ms);
150 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb.us-east-1.api.aws");
151 assert_eq!(
152 endpoint,
153 ::aws_smithy_types::endpoint::Endpoint::builder()
154 .url("https://sdb.us-east-1.api.aws")
155 .build()
156 );
157 }
158
159 #[test]
161 fn test_8() {
162 let params = crate::config::endpoint::Params::builder()
163 .region("cn-northwest-1".to_string())
164 .use_fips(true)
165 .use_dual_stack(true)
166 .build()
167 .expect("invalid params");
168 let resolver = crate::config::endpoint::DefaultResolver::new();
169 let endpoint = resolver.resolve_endpoint(¶ms);
170 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb-fips.cn-northwest-1.api.amazonwebservices.com.cn");
171 assert_eq!(
172 endpoint,
173 ::aws_smithy_types::endpoint::Endpoint::builder()
174 .url("https://sdb-fips.cn-northwest-1.api.amazonwebservices.com.cn")
175 .build()
176 );
177 }
178
179 #[test]
181 fn test_9() {
182 let params = crate::config::endpoint::Params::builder()
183 .region("cn-northwest-1".to_string())
184 .use_fips(true)
185 .use_dual_stack(false)
186 .build()
187 .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://sdb-fips.cn-northwest-1.amazonaws.com.cn");
191 assert_eq!(
192 endpoint,
193 ::aws_smithy_types::endpoint::Endpoint::builder()
194 .url("https://sdb-fips.cn-northwest-1.amazonaws.com.cn")
195 .build()
196 );
197 }
198
199 #[test]
201 fn test_10() {
202 let params = crate::config::endpoint::Params::builder()
203 .region("cn-northwest-1".to_string())
204 .use_fips(false)
205 .use_dual_stack(true)
206 .build()
207 .expect("invalid params");
208 let resolver = crate::config::endpoint::DefaultResolver::new();
209 let endpoint = resolver.resolve_endpoint(¶ms);
210 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb.cn-northwest-1.api.amazonwebservices.com.cn");
211 assert_eq!(
212 endpoint,
213 ::aws_smithy_types::endpoint::Endpoint::builder()
214 .url("https://sdb.cn-northwest-1.api.amazonwebservices.com.cn")
215 .build()
216 );
217 }
218
219 #[test]
221 fn test_11() {
222 let params = crate::config::endpoint::Params::builder()
223 .region("cn-northwest-1".to_string())
224 .use_fips(false)
225 .use_dual_stack(false)
226 .build()
227 .expect("invalid params");
228 let resolver = crate::config::endpoint::DefaultResolver::new();
229 let endpoint = resolver.resolve_endpoint(¶ms);
230 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb.cn-northwest-1.amazonaws.com.cn");
231 assert_eq!(
232 endpoint,
233 ::aws_smithy_types::endpoint::Endpoint::builder()
234 .url("https://sdb.cn-northwest-1.amazonaws.com.cn")
235 .build()
236 );
237 }
238
239 #[test]
241 fn test_12() {
242 let params = crate::config::endpoint::Params::builder()
243 .region("eusc-de-east-1".to_string())
244 .use_fips(true)
245 .use_dual_stack(false)
246 .build()
247 .expect("invalid params");
248 let resolver = crate::config::endpoint::DefaultResolver::new();
249 let endpoint = resolver.resolve_endpoint(¶ms);
250 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb-fips.eusc-de-east-1.amazonaws.eu");
251 assert_eq!(
252 endpoint,
253 ::aws_smithy_types::endpoint::Endpoint::builder()
254 .url("https://sdb-fips.eusc-de-east-1.amazonaws.eu")
255 .build()
256 );
257 }
258
259 #[test]
261 fn test_13() {
262 let params = crate::config::endpoint::Params::builder()
263 .region("eusc-de-east-1".to_string())
264 .use_fips(false)
265 .use_dual_stack(false)
266 .build()
267 .expect("invalid params");
268 let resolver = crate::config::endpoint::DefaultResolver::new();
269 let endpoint = resolver.resolve_endpoint(¶ms);
270 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb.eusc-de-east-1.amazonaws.eu");
271 assert_eq!(
272 endpoint,
273 ::aws_smithy_types::endpoint::Endpoint::builder()
274 .url("https://sdb.eusc-de-east-1.amazonaws.eu")
275 .build()
276 );
277 }
278
279 #[test]
281 fn test_14() {
282 let params = crate::config::endpoint::Params::builder()
283 .region("us-iso-east-1".to_string())
284 .use_fips(true)
285 .use_dual_stack(false)
286 .build()
287 .expect("invalid params");
288 let resolver = crate::config::endpoint::DefaultResolver::new();
289 let endpoint = resolver.resolve_endpoint(¶ms);
290 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb-fips.us-iso-east-1.c2s.ic.gov");
291 assert_eq!(
292 endpoint,
293 ::aws_smithy_types::endpoint::Endpoint::builder()
294 .url("https://sdb-fips.us-iso-east-1.c2s.ic.gov")
295 .build()
296 );
297 }
298
299 #[test]
301 fn test_15() {
302 let params = crate::config::endpoint::Params::builder()
303 .region("us-iso-east-1".to_string())
304 .use_fips(false)
305 .use_dual_stack(false)
306 .build()
307 .expect("invalid params");
308 let resolver = crate::config::endpoint::DefaultResolver::new();
309 let endpoint = resolver.resolve_endpoint(¶ms);
310 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb.us-iso-east-1.c2s.ic.gov");
311 assert_eq!(
312 endpoint,
313 ::aws_smithy_types::endpoint::Endpoint::builder()
314 .url("https://sdb.us-iso-east-1.c2s.ic.gov")
315 .build()
316 );
317 }
318
319 #[test]
321 fn test_16() {
322 let params = crate::config::endpoint::Params::builder()
323 .region("us-isob-east-1".to_string())
324 .use_fips(true)
325 .use_dual_stack(false)
326 .build()
327 .expect("invalid params");
328 let resolver = crate::config::endpoint::DefaultResolver::new();
329 let endpoint = resolver.resolve_endpoint(¶ms);
330 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb-fips.us-isob-east-1.sc2s.sgov.gov");
331 assert_eq!(
332 endpoint,
333 ::aws_smithy_types::endpoint::Endpoint::builder()
334 .url("https://sdb-fips.us-isob-east-1.sc2s.sgov.gov")
335 .build()
336 );
337 }
338
339 #[test]
341 fn test_17() {
342 let params = crate::config::endpoint::Params::builder()
343 .region("us-isob-east-1".to_string())
344 .use_fips(false)
345 .use_dual_stack(false)
346 .build()
347 .expect("invalid params");
348 let resolver = crate::config::endpoint::DefaultResolver::new();
349 let endpoint = resolver.resolve_endpoint(¶ms);
350 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb.us-isob-east-1.sc2s.sgov.gov");
351 assert_eq!(
352 endpoint,
353 ::aws_smithy_types::endpoint::Endpoint::builder()
354 .url("https://sdb.us-isob-east-1.sc2s.sgov.gov")
355 .build()
356 );
357 }
358
359 #[test]
361 fn test_18() {
362 let params = crate::config::endpoint::Params::builder()
363 .region("eu-isoe-west-1".to_string())
364 .use_fips(true)
365 .use_dual_stack(false)
366 .build()
367 .expect("invalid params");
368 let resolver = crate::config::endpoint::DefaultResolver::new();
369 let endpoint = resolver.resolve_endpoint(¶ms);
370 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb-fips.eu-isoe-west-1.cloud.adc-e.uk");
371 assert_eq!(
372 endpoint,
373 ::aws_smithy_types::endpoint::Endpoint::builder()
374 .url("https://sdb-fips.eu-isoe-west-1.cloud.adc-e.uk")
375 .build()
376 );
377 }
378
379 #[test]
381 fn test_19() {
382 let params = crate::config::endpoint::Params::builder()
383 .region("eu-isoe-west-1".to_string())
384 .use_fips(false)
385 .use_dual_stack(false)
386 .build()
387 .expect("invalid params");
388 let resolver = crate::config::endpoint::DefaultResolver::new();
389 let endpoint = resolver.resolve_endpoint(¶ms);
390 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb.eu-isoe-west-1.cloud.adc-e.uk");
391 assert_eq!(
392 endpoint,
393 ::aws_smithy_types::endpoint::Endpoint::builder()
394 .url("https://sdb.eu-isoe-west-1.cloud.adc-e.uk")
395 .build()
396 );
397 }
398
399 #[test]
401 fn test_20() {
402 let params = crate::config::endpoint::Params::builder()
403 .region("us-isof-south-1".to_string())
404 .use_fips(true)
405 .use_dual_stack(false)
406 .build()
407 .expect("invalid params");
408 let resolver = crate::config::endpoint::DefaultResolver::new();
409 let endpoint = resolver.resolve_endpoint(¶ms);
410 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb-fips.us-isof-south-1.csp.hci.ic.gov");
411 assert_eq!(
412 endpoint,
413 ::aws_smithy_types::endpoint::Endpoint::builder()
414 .url("https://sdb-fips.us-isof-south-1.csp.hci.ic.gov")
415 .build()
416 );
417 }
418
419 #[test]
421 fn test_21() {
422 let params = crate::config::endpoint::Params::builder()
423 .region("us-isof-south-1".to_string())
424 .use_fips(false)
425 .use_dual_stack(false)
426 .build()
427 .expect("invalid params");
428 let resolver = crate::config::endpoint::DefaultResolver::new();
429 let endpoint = resolver.resolve_endpoint(¶ms);
430 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb.us-isof-south-1.csp.hci.ic.gov");
431 assert_eq!(
432 endpoint,
433 ::aws_smithy_types::endpoint::Endpoint::builder()
434 .url("https://sdb.us-isof-south-1.csp.hci.ic.gov")
435 .build()
436 );
437 }
438
439 #[test]
441 fn test_22() {
442 let params = crate::config::endpoint::Params::builder()
443 .region("us-gov-west-1".to_string())
444 .use_fips(true)
445 .use_dual_stack(true)
446 .build()
447 .expect("invalid params");
448 let resolver = crate::config::endpoint::DefaultResolver::new();
449 let endpoint = resolver.resolve_endpoint(¶ms);
450 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb-fips.us-gov-west-1.api.aws");
451 assert_eq!(
452 endpoint,
453 ::aws_smithy_types::endpoint::Endpoint::builder()
454 .url("https://sdb-fips.us-gov-west-1.api.aws")
455 .build()
456 );
457 }
458
459 #[test]
461 fn test_23() {
462 let params = crate::config::endpoint::Params::builder()
463 .region("us-gov-west-1".to_string())
464 .use_fips(true)
465 .use_dual_stack(false)
466 .build()
467 .expect("invalid params");
468 let resolver = crate::config::endpoint::DefaultResolver::new();
469 let endpoint = resolver.resolve_endpoint(¶ms);
470 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb-fips.us-gov-west-1.amazonaws.com");
471 assert_eq!(
472 endpoint,
473 ::aws_smithy_types::endpoint::Endpoint::builder()
474 .url("https://sdb-fips.us-gov-west-1.amazonaws.com")
475 .build()
476 );
477 }
478
479 #[test]
481 fn test_24() {
482 let params = crate::config::endpoint::Params::builder()
483 .region("us-gov-west-1".to_string())
484 .use_fips(false)
485 .use_dual_stack(true)
486 .build()
487 .expect("invalid params");
488 let resolver = crate::config::endpoint::DefaultResolver::new();
489 let endpoint = resolver.resolve_endpoint(¶ms);
490 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb.us-gov-west-1.api.aws");
491 assert_eq!(
492 endpoint,
493 ::aws_smithy_types::endpoint::Endpoint::builder()
494 .url("https://sdb.us-gov-west-1.api.aws")
495 .build()
496 );
497 }
498
499 #[test]
501 fn test_25() {
502 let params = crate::config::endpoint::Params::builder()
503 .region("us-gov-west-1".to_string())
504 .use_fips(false)
505 .use_dual_stack(false)
506 .build()
507 .expect("invalid params");
508 let resolver = crate::config::endpoint::DefaultResolver::new();
509 let endpoint = resolver.resolve_endpoint(¶ms);
510 let endpoint = endpoint.expect("Expected valid endpoint: https://sdb.us-gov-west-1.amazonaws.com");
511 assert_eq!(
512 endpoint,
513 ::aws_smithy_types::endpoint::Endpoint::builder()
514 .url("https://sdb.us-gov-west-1.amazonaws.com")
515 .build()
516 );
517 }
518
519 #[test]
521 fn test_26() {
522 let params = crate::config::endpoint::Params::builder().build().expect("invalid params");
523 let resolver = crate::config::endpoint::DefaultResolver::new();
524 let endpoint = resolver.resolve_endpoint(¶ms);
525 let error = endpoint.expect_err("expected error: Invalid Configuration: Missing Region [Missing region]");
526 assert_eq!(format!("{}", error), "Invalid Configuration: Missing Region")
527 }
528}
529
530pub trait ResolveEndpoint: ::std::marker::Send + ::std::marker::Sync + ::std::fmt::Debug {
532 fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a>;
534
535 fn into_shared_resolver(self) -> ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver
539 where
540 Self: Sized + 'static,
541 {
542 ::aws_smithy_runtime_api::client::endpoint::SharedEndpointResolver::new(DowncastParams(self))
543 }
544}
545
546#[derive(Debug)]
547struct DowncastParams<T>(T);
548impl<T> ::aws_smithy_runtime_api::client::endpoint::ResolveEndpoint for DowncastParams<T>
549where
550 T: ResolveEndpoint,
551{
552 fn resolve_endpoint<'a>(
553 &'a self,
554 params: &'a ::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams,
555 ) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a> {
556 let ep = match params.get::<crate::config::endpoint::Params>() {
557 Some(params) => self.0.resolve_endpoint(params),
558 None => ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(Err("params of expected type was not present".into())),
559 };
560 ep
561 }
562}
563
564#[derive(Debug, Default)]
566pub struct DefaultResolver {
567 partition_resolver: crate::endpoint_lib::partition::PartitionResolver,
568}
569
570impl DefaultResolver {
571 pub fn new() -> Self {
573 Self {
574 partition_resolver: crate::endpoint_lib::DEFAULT_PARTITION_RESOLVER.clone(),
575 }
576 }
577
578 fn resolve_endpoint(
579 &self,
580 params: &crate::config::endpoint::Params,
581 ) -> ::std::result::Result<::aws_smithy_types::endpoint::Endpoint, ::aws_smithy_runtime_api::box_error::BoxError> {
582 let mut diagnostic_collector = crate::endpoint_lib::diagnostic::DiagnosticCollector::new();
583 Ok(
584 crate::config::endpoint::internals::resolve_endpoint(params, &mut diagnostic_collector, &self.partition_resolver)
585 .map_err(|err| err.with_source(diagnostic_collector.take_last_error()))?,
586 )
587 }
588}
589
590impl crate::config::endpoint::ResolveEndpoint for DefaultResolver {
591 fn resolve_endpoint(&self, params: &crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'_> {
592 ::aws_smithy_runtime_api::client::endpoint::EndpointFuture::ready(self.resolve_endpoint(params))
593 }
594}
595
596#[non_exhaustive]
597#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
598pub struct Params {
600 pub(crate) use_dual_stack: bool,
602 pub(crate) use_fips: bool,
604 pub(crate) endpoint: ::std::option::Option<::std::string::String>,
606 pub(crate) region: ::std::option::Option<::std::string::String>,
608}
609impl Params {
610 pub fn builder() -> crate::config::endpoint::ParamsBuilder {
612 crate::config::endpoint::ParamsBuilder::default()
613 }
614 pub fn use_dual_stack(&self) -> ::std::option::Option<bool> {
616 Some(self.use_dual_stack)
617 }
618 pub fn use_fips(&self) -> ::std::option::Option<bool> {
620 Some(self.use_fips)
621 }
622 pub fn endpoint(&self) -> ::std::option::Option<&str> {
624 self.endpoint.as_deref()
625 }
626 pub fn region(&self) -> ::std::option::Option<&str> {
628 self.region.as_deref()
629 }
630}
631
632#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
634pub struct ParamsBuilder {
635 use_dual_stack: ::std::option::Option<bool>,
636 use_fips: ::std::option::Option<bool>,
637 endpoint: ::std::option::Option<::std::string::String>,
638 region: ::std::option::Option<::std::string::String>,
639}
640impl ParamsBuilder {
641 pub fn build(self) -> ::std::result::Result<crate::config::endpoint::Params, crate::config::endpoint::InvalidParams> {
643 if let Some(region) = &self.region {
644 if !crate::endpoint_lib::host::is_valid_host_label(
645 region.as_ref() as &str,
646 true,
647 &mut crate::endpoint_lib::diagnostic::DiagnosticCollector::new(),
648 ) {
649 return Err(crate::config::endpoint::InvalidParams::invalid_value(
650 "region",
651 "must be a valid host label",
652 ));
653 }
654 };
655 Ok(
656 #[allow(clippy::unnecessary_lazy_evaluations)]
657 crate::config::endpoint::Params {
658 use_dual_stack: self
659 .use_dual_stack
660 .or_else(|| Some(false))
661 .ok_or_else(|| crate::config::endpoint::InvalidParams::missing("use_dual_stack"))?,
662 use_fips: self
663 .use_fips
664 .or_else(|| Some(false))
665 .ok_or_else(|| crate::config::endpoint::InvalidParams::missing("use_fips"))?,
666 endpoint: self.endpoint,
667 region: self.region,
668 },
669 )
670 }
671 pub fn use_dual_stack(mut self, value: impl Into<bool>) -> Self {
676 self.use_dual_stack = Some(value.into());
677 self
678 }
679
680 pub fn set_use_dual_stack(mut self, param: Option<bool>) -> Self {
685 self.use_dual_stack = param;
686 self
687 }
688 pub fn use_fips(mut self, value: impl Into<bool>) -> Self {
693 self.use_fips = Some(value.into());
694 self
695 }
696
697 pub fn set_use_fips(mut self, param: Option<bool>) -> Self {
702 self.use_fips = param;
703 self
704 }
705 pub fn endpoint(mut self, value: impl Into<::std::string::String>) -> Self {
709 self.endpoint = Some(value.into());
710 self
711 }
712
713 pub fn set_endpoint(mut self, param: Option<::std::string::String>) -> Self {
717 self.endpoint = param;
718 self
719 }
720 pub fn region(mut self, value: impl Into<::std::string::String>) -> Self {
724 self.region = Some(value.into());
725 self
726 }
727
728 pub fn set_region(mut self, param: Option<::std::string::String>) -> Self {
732 self.region = param;
733 self
734 }
735}
736
737#[derive(Debug)]
739pub struct InvalidParams {
740 field: std::borrow::Cow<'static, str>,
741 kind: InvalidParamsErrorKind,
742}
743
744#[derive(Debug)]
746enum InvalidParamsErrorKind {
747 MissingField,
748 InvalidValue { message: &'static str },
749}
750
751impl InvalidParams {
752 #[allow(dead_code)]
753 fn missing(field: &'static str) -> Self {
754 Self {
755 field: field.into(),
756 kind: InvalidParamsErrorKind::MissingField,
757 }
758 }
759
760 #[allow(dead_code)]
761 fn invalid_value(field: &'static str, message: &'static str) -> Self {
762 Self {
763 field: field.into(),
764 kind: InvalidParamsErrorKind::InvalidValue { message },
765 }
766 }
767}
768
769impl std::fmt::Display for InvalidParams {
770 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
771 match self.kind {
772 InvalidParamsErrorKind::MissingField => write!(f, "a required field was missing: `{}`", self.field),
773 InvalidParamsErrorKind::InvalidValue { message } => write!(f, "invalid value for field: `{}` - {}", self.field, message),
774 }
775 }
776}
777
778impl std::error::Error for InvalidParams {}
779
780mod internals;