Skip to main content

aws_sdk_simpledbv2/config/
endpoint.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2pub 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/// Interceptor that tracks endpoint override business metric.
7#[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    /// For custom endpoint with region not set and fips disabled
32    #[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(&params);
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    /// For custom endpoint with fips enabled
49    #[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(&params);
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    /// For custom endpoint with fips disabled and dualstack enabled
64    #[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(&params);
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    /// For region us-east-1 with FIPS disabled and DualStack disabled
82    #[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(&params);
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    /// For region us-east-1 with FIPS enabled and DualStack enabled
100    #[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(&params);
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    /// For region us-east-1 with FIPS enabled and DualStack disabled
120    #[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(&params);
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    /// For region us-east-1 with FIPS disabled and DualStack enabled
140    #[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(&params);
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    /// For region cn-northwest-1 with FIPS enabled and DualStack enabled
160    #[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(&params);
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    /// For region cn-northwest-1 with FIPS enabled and DualStack disabled
180    #[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(&params);
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    /// For region cn-northwest-1 with FIPS disabled and DualStack enabled
200    #[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(&params);
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    /// For region cn-northwest-1 with FIPS disabled and DualStack disabled
220    #[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(&params);
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    /// For region eusc-de-east-1 with FIPS enabled and DualStack disabled
240    #[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(&params);
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    /// For region eusc-de-east-1 with FIPS disabled and DualStack disabled
260    #[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(&params);
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    /// For region us-iso-east-1 with FIPS enabled and DualStack disabled
280    #[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(&params);
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    /// For region us-iso-east-1 with FIPS disabled and DualStack disabled
300    #[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(&params);
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    /// For region us-isob-east-1 with FIPS enabled and DualStack disabled
320    #[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(&params);
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    /// For region us-isob-east-1 with FIPS disabled and DualStack disabled
340    #[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(&params);
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    /// For region eu-isoe-west-1 with FIPS enabled and DualStack disabled
360    #[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(&params);
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    /// For region eu-isoe-west-1 with FIPS disabled and DualStack disabled
380    #[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(&params);
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    /// For region us-isof-south-1 with FIPS enabled and DualStack disabled
400    #[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(&params);
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    /// For region us-isof-south-1 with FIPS disabled and DualStack disabled
420    #[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(&params);
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    /// For region us-gov-west-1 with FIPS enabled and DualStack enabled
440    #[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(&params);
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    /// For region us-gov-west-1 with FIPS enabled and DualStack disabled
460    #[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(&params);
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    /// For region us-gov-west-1 with FIPS disabled and DualStack enabled
480    #[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(&params);
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    /// For region us-gov-west-1 with FIPS disabled and DualStack disabled
500    #[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(&params);
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    /// Missing region
520    #[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(&params);
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
530/// Endpoint resolver trait specific to Amazon SimpleDB v2
531pub trait ResolveEndpoint: ::std::marker::Send + ::std::marker::Sync + ::std::fmt::Debug {
532    /// Resolve an endpoint with the given parameters
533    fn resolve_endpoint<'a>(&'a self, params: &'a crate::config::endpoint::Params) -> ::aws_smithy_runtime_api::client::endpoint::EndpointFuture<'a>;
534
535    /// Convert this service-specific resolver into a `SharedEndpointResolver`
536    ///
537    /// The resulting resolver will downcast `EndpointResolverParams` into `crate::config::endpoint::Params`.
538    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/// The default endpoint resolver
565#[derive(Debug, Default)]
566pub struct DefaultResolver {
567    partition_resolver: crate::endpoint_lib::partition::PartitionResolver,
568}
569
570impl DefaultResolver {
571    /// Create a new endpoint resolver with default settings
572    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)]
598/// Configuration parameters for resolving the correct endpoint
599pub struct Params {
600    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
601    pub(crate) use_dual_stack: bool,
602    /// When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.
603    pub(crate) use_fips: bool,
604    /// Override the endpoint used to send this request
605    pub(crate) endpoint: ::std::option::Option<::std::string::String>,
606    /// The AWS region used to dispatch the request.
607    pub(crate) region: ::std::option::Option<::std::string::String>,
608}
609impl Params {
610    /// Create a builder for [`Params`]
611    pub fn builder() -> crate::config::endpoint::ParamsBuilder {
612        crate::config::endpoint::ParamsBuilder::default()
613    }
614    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
615    pub fn use_dual_stack(&self) -> ::std::option::Option<bool> {
616        Some(self.use_dual_stack)
617    }
618    /// When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.
619    pub fn use_fips(&self) -> ::std::option::Option<bool> {
620        Some(self.use_fips)
621    }
622    /// Override the endpoint used to send this request
623    pub fn endpoint(&self) -> ::std::option::Option<&str> {
624        self.endpoint.as_deref()
625    }
626    /// The AWS region used to dispatch the request.
627    pub fn region(&self) -> ::std::option::Option<&str> {
628        self.region.as_deref()
629    }
630}
631
632/// Builder for [`Params`]
633#[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    /// Consume this builder, creating [`Params`].
642    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    /// Sets the value for use_dual_stack
672    ///
673    /// When unset, this parameter has a default value of `false`.
674    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
675    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    /// Sets the value for use_dual_stack
681    ///
682    /// When unset, this parameter has a default value of `false`.
683    /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
684    pub fn set_use_dual_stack(mut self, param: Option<bool>) -> Self {
685        self.use_dual_stack = param;
686        self
687    }
688    /// Sets the value for use_fips
689    ///
690    /// When unset, this parameter has a default value of `false`.
691    /// When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.
692    pub fn use_fips(mut self, value: impl Into<bool>) -> Self {
693        self.use_fips = Some(value.into());
694        self
695    }
696
697    /// Sets the value for use_fips
698    ///
699    /// When unset, this parameter has a default value of `false`.
700    /// When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.
701    pub fn set_use_fips(mut self, param: Option<bool>) -> Self {
702        self.use_fips = param;
703        self
704    }
705    /// Sets the value for endpoint
706    ///
707    /// Override the endpoint used to send this request
708    pub fn endpoint(mut self, value: impl Into<::std::string::String>) -> Self {
709        self.endpoint = Some(value.into());
710        self
711    }
712
713    /// Sets the value for endpoint
714    ///
715    /// Override the endpoint used to send this request
716    pub fn set_endpoint(mut self, param: Option<::std::string::String>) -> Self {
717        self.endpoint = param;
718        self
719    }
720    /// Sets the value for region
721    ///
722    /// The AWS region used to dispatch the request.
723    pub fn region(mut self, value: impl Into<::std::string::String>) -> Self {
724        self.region = Some(value.into());
725        self
726    }
727
728    /// Sets the value for region
729    ///
730    /// The AWS region used to dispatch the request.
731    pub fn set_region(mut self, param: Option<::std::string::String>) -> Self {
732        self.region = param;
733        self
734    }
735}
736
737/// An error that occurred during endpoint resolution
738#[derive(Debug)]
739pub struct InvalidParams {
740    field: std::borrow::Cow<'static, str>,
741    kind: InvalidParamsErrorKind,
742}
743
744/// The kind of invalid parameter error
745#[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;