aws_sdk_eks/operation/
create_cluster.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `CreateCluster`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct CreateCluster;
6impl CreateCluster {
7    /// Creates a new `CreateCluster`
8    pub fn new() -> Self {
9        Self
10    }
11    pub(crate) async fn orchestrate(
12        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
13        input: crate::operation::create_cluster::CreateClusterInput,
14    ) -> ::std::result::Result<
15        crate::operation::create_cluster::CreateClusterOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::create_cluster::CreateClusterError,
18            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
19        >,
20    > {
21        let map_err = |err: ::aws_smithy_runtime_api::client::result::SdkError<
22            ::aws_smithy_runtime_api::client::interceptors::context::Error,
23            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
24        >| {
25            err.map_service_error(|err| {
26                err.downcast::<crate::operation::create_cluster::CreateClusterError>()
27                    .expect("correct error type")
28            })
29        };
30        let context = Self::orchestrate_with_stop_point(runtime_plugins, input, ::aws_smithy_runtime::client::orchestrator::StopPoint::None)
31            .await
32            .map_err(map_err)?;
33        let output = context.finalize().map_err(map_err)?;
34        ::std::result::Result::Ok(
35            output
36                .downcast::<crate::operation::create_cluster::CreateClusterOutput>()
37                .expect("correct output type"),
38        )
39    }
40
41    pub(crate) async fn orchestrate_with_stop_point(
42        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
43        input: crate::operation::create_cluster::CreateClusterInput,
44        stop_point: ::aws_smithy_runtime::client::orchestrator::StopPoint,
45    ) -> ::std::result::Result<
46        ::aws_smithy_runtime_api::client::interceptors::context::InterceptorContext,
47        ::aws_smithy_runtime_api::client::result::SdkError<
48            ::aws_smithy_runtime_api::client::interceptors::context::Error,
49            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
50        >,
51    > {
52        let input = ::aws_smithy_runtime_api::client::interceptors::context::Input::erase(input);
53        ::aws_smithy_runtime::client::orchestrator::invoke_with_stop_point("eks", "CreateCluster", input, runtime_plugins, stop_point).await
54    }
55
56    pub(crate) fn operation_runtime_plugins(
57        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
58        client_config: &crate::config::Config,
59        config_override: ::std::option::Option<crate::config::Builder>,
60    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
61        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
62        runtime_plugins = runtime_plugins
63            .with_operation_plugin(crate::client_idempotency_token::IdempotencyTokenRuntimePlugin::new(
64                |token_provider, input| {
65                    let input: &mut crate::operation::create_cluster::CreateClusterInput = input.downcast_mut().expect("correct type");
66                    if input.client_request_token.is_none() {
67                        input.client_request_token = ::std::option::Option::Some(token_provider.make_idempotency_token());
68                    }
69                },
70            ))
71            .with_client_plugin(crate::auth_plugin::DefaultAuthOptionsPlugin::new(vec![
72                ::aws_runtime::auth::sigv4::SCHEME_ID,
73            ]));
74        if let ::std::option::Option::Some(config_override) = config_override {
75            for plugin in config_override.runtime_plugins.iter().cloned() {
76                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
77            }
78            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
79                config_override,
80                client_config.config.clone(),
81                &client_config.runtime_components,
82            ));
83        }
84        runtime_plugins
85    }
86}
87impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for CreateCluster {
88    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
89        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("CreateCluster");
90
91        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
92            CreateClusterRequestSerializer,
93        ));
94        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
95            CreateClusterResponseDeserializer,
96        ));
97
98        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
99            ::aws_smithy_runtime_api::client::auth::static_resolver::StaticAuthSchemeOptionResolverParams::new(),
100        ));
101
102        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new("CreateCluster", "eks"));
103        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
104        signing_options.double_uri_encode = true;
105        signing_options.content_sha256_header = false;
106        signing_options.normalize_uri_path = true;
107        signing_options.payload_override = None;
108
109        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
110            signing_options,
111            ..::std::default::Default::default()
112        });
113
114        ::std::option::Option::Some(cfg.freeze())
115    }
116
117    fn runtime_components(
118        &self,
119        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
120    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
121        #[allow(unused_mut)]
122        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("CreateCluster")
123            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
124            .with_interceptor(CreateClusterEndpointParamsInterceptor)
125            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
126                crate::operation::create_cluster::CreateClusterError,
127            >::new())
128            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
129                crate::operation::create_cluster::CreateClusterError,
130            >::new())
131            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
132                crate::operation::create_cluster::CreateClusterError,
133            >::new());
134
135        ::std::borrow::Cow::Owned(rcb)
136    }
137}
138
139#[derive(Debug)]
140struct CreateClusterResponseDeserializer;
141impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for CreateClusterResponseDeserializer {
142    fn deserialize_nonstreaming(
143        &self,
144        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
145    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
146        let (success, status) = (response.status().is_success(), response.status().as_u16());
147        let headers = response.headers();
148        let body = response.body().bytes().expect("body loaded");
149        #[allow(unused_mut)]
150        let mut force_error = false;
151        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
152        let parse_result = if !success && status != 200 || force_error {
153            crate::protocol_serde::shape_create_cluster::de_create_cluster_http_error(status, headers, body)
154        } else {
155            crate::protocol_serde::shape_create_cluster::de_create_cluster_http_response(status, headers, body)
156        };
157        crate::protocol_serde::type_erase_result(parse_result)
158    }
159}
160#[derive(Debug)]
161struct CreateClusterRequestSerializer;
162impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for CreateClusterRequestSerializer {
163    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
164    fn serialize_input(
165        &self,
166        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
167        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
168    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
169        let input = input
170            .downcast::<crate::operation::create_cluster::CreateClusterInput>()
171            .expect("correct type");
172        let _header_serialization_settings = _cfg
173            .load::<crate::serialization_settings::HeaderSerializationSettings>()
174            .cloned()
175            .unwrap_or_default();
176        let mut request_builder = {
177            fn uri_base(
178                _input: &crate::operation::create_cluster::CreateClusterInput,
179                output: &mut ::std::string::String,
180            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
181                use ::std::fmt::Write as _;
182                ::std::write!(output, "/clusters").expect("formatting should succeed");
183                ::std::result::Result::Ok(())
184            }
185            #[allow(clippy::unnecessary_wraps)]
186            fn update_http_builder(
187                input: &crate::operation::create_cluster::CreateClusterInput,
188                builder: ::http::request::Builder,
189            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
190                let mut uri = ::std::string::String::new();
191                uri_base(input, &mut uri)?;
192                ::std::result::Result::Ok(builder.method("POST").uri(uri))
193            }
194            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
195            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/json");
196            builder
197        };
198        let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_create_cluster::ser_create_cluster_input(&input)?);
199        if let Some(content_length) = body.content_length() {
200            let content_length = content_length.to_string();
201            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
202        }
203        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
204    }
205}
206#[derive(Debug)]
207struct CreateClusterEndpointParamsInterceptor;
208
209impl ::aws_smithy_runtime_api::client::interceptors::Intercept for CreateClusterEndpointParamsInterceptor {
210    fn name(&self) -> &'static str {
211        "CreateClusterEndpointParamsInterceptor"
212    }
213
214    fn read_before_execution(
215        &self,
216        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
217            '_,
218            ::aws_smithy_runtime_api::client::interceptors::context::Input,
219            ::aws_smithy_runtime_api::client::interceptors::context::Output,
220            ::aws_smithy_runtime_api::client::interceptors::context::Error,
221        >,
222        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
223    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
224        let _input = context
225            .input()
226            .downcast_ref::<CreateClusterInput>()
227            .ok_or("failed to downcast to CreateClusterInput")?;
228
229        let params = crate::config::endpoint::Params::builder()
230            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
231            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
232            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
233            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
234            .build()
235            .map_err(|err| {
236                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
237            })?;
238        cfg.interceptor_state()
239            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
240        ::std::result::Result::Ok(())
241    }
242}
243
244// The get_* functions below are generated from JMESPath expressions in the
245// operationContextParams trait. They target the operation's input shape.
246
247/// Error type for the `CreateClusterError` operation.
248#[non_exhaustive]
249#[derive(::std::fmt::Debug)]
250pub enum CreateClusterError {
251    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of an <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html">IAM principal</a> that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
252    ClientException(crate::types::error::ClientException),
253    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
254    InvalidParameterException(crate::types::error::InvalidParameterException),
255    /// <p>The specified resource is in use.</p>
256    ResourceInUseException(crate::types::error::ResourceInUseException),
257    /// <p>You have encountered a service limit on the specified resource.</p>
258    ResourceLimitExceededException(crate::types::error::ResourceLimitExceededException),
259    /// <p>These errors are usually caused by a server-side issue.</p>
260    ServerException(crate::types::error::ServerException),
261    /// <p>The service is unavailable. Back off and retry the operation.</p>
262    ServiceUnavailableException(crate::types::error::ServiceUnavailableException),
263    /// <p>At least one of your specified cluster subnets is in an Availability Zone that does not support Amazon EKS. The exception output specifies the supported Availability Zones for your account, from which you can choose subnets for your cluster.</p>
264    UnsupportedAvailabilityZoneException(crate::types::error::UnsupportedAvailabilityZoneException),
265    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
266    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
267    variable wildcard pattern and check `.code()`:
268     \
269    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
270     \
271    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-CreateClusterError) for what information is available for the error.")]
272    Unhandled(crate::error::sealed_unhandled::Unhandled),
273}
274impl CreateClusterError {
275    /// Creates the `CreateClusterError::Unhandled` variant from any error type.
276    pub fn unhandled(
277        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
278    ) -> Self {
279        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
280            source: err.into(),
281            meta: ::std::default::Default::default(),
282        })
283    }
284
285    /// Creates the `CreateClusterError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
286    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
287        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
288            source: err.clone().into(),
289            meta: err,
290        })
291    }
292    ///
293    /// Returns error metadata, which includes the error code, message,
294    /// request ID, and potentially additional information.
295    ///
296    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
297        match self {
298            Self::ClientException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
299            Self::InvalidParameterException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
300            Self::ResourceInUseException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
301            Self::ResourceLimitExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
302            Self::ServerException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
303            Self::ServiceUnavailableException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
304            Self::UnsupportedAvailabilityZoneException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
305            Self::Unhandled(e) => &e.meta,
306        }
307    }
308    /// Returns `true` if the error kind is `CreateClusterError::ClientException`.
309    pub fn is_client_exception(&self) -> bool {
310        matches!(self, Self::ClientException(_))
311    }
312    /// Returns `true` if the error kind is `CreateClusterError::InvalidParameterException`.
313    pub fn is_invalid_parameter_exception(&self) -> bool {
314        matches!(self, Self::InvalidParameterException(_))
315    }
316    /// Returns `true` if the error kind is `CreateClusterError::ResourceInUseException`.
317    pub fn is_resource_in_use_exception(&self) -> bool {
318        matches!(self, Self::ResourceInUseException(_))
319    }
320    /// Returns `true` if the error kind is `CreateClusterError::ResourceLimitExceededException`.
321    pub fn is_resource_limit_exceeded_exception(&self) -> bool {
322        matches!(self, Self::ResourceLimitExceededException(_))
323    }
324    /// Returns `true` if the error kind is `CreateClusterError::ServerException`.
325    pub fn is_server_exception(&self) -> bool {
326        matches!(self, Self::ServerException(_))
327    }
328    /// Returns `true` if the error kind is `CreateClusterError::ServiceUnavailableException`.
329    pub fn is_service_unavailable_exception(&self) -> bool {
330        matches!(self, Self::ServiceUnavailableException(_))
331    }
332    /// Returns `true` if the error kind is `CreateClusterError::UnsupportedAvailabilityZoneException`.
333    pub fn is_unsupported_availability_zone_exception(&self) -> bool {
334        matches!(self, Self::UnsupportedAvailabilityZoneException(_))
335    }
336}
337impl ::std::error::Error for CreateClusterError {
338    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
339        match self {
340            Self::ClientException(_inner) => ::std::option::Option::Some(_inner),
341            Self::InvalidParameterException(_inner) => ::std::option::Option::Some(_inner),
342            Self::ResourceInUseException(_inner) => ::std::option::Option::Some(_inner),
343            Self::ResourceLimitExceededException(_inner) => ::std::option::Option::Some(_inner),
344            Self::ServerException(_inner) => ::std::option::Option::Some(_inner),
345            Self::ServiceUnavailableException(_inner) => ::std::option::Option::Some(_inner),
346            Self::UnsupportedAvailabilityZoneException(_inner) => ::std::option::Option::Some(_inner),
347            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
348        }
349    }
350}
351impl ::std::fmt::Display for CreateClusterError {
352    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
353        match self {
354            Self::ClientException(_inner) => _inner.fmt(f),
355            Self::InvalidParameterException(_inner) => _inner.fmt(f),
356            Self::ResourceInUseException(_inner) => _inner.fmt(f),
357            Self::ResourceLimitExceededException(_inner) => _inner.fmt(f),
358            Self::ServerException(_inner) => _inner.fmt(f),
359            Self::ServiceUnavailableException(_inner) => _inner.fmt(f),
360            Self::UnsupportedAvailabilityZoneException(_inner) => _inner.fmt(f),
361            Self::Unhandled(_inner) => {
362                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
363                    write!(f, "unhandled error ({code})")
364                } else {
365                    f.write_str("unhandled error")
366                }
367            }
368        }
369    }
370}
371impl ::aws_smithy_types::retry::ProvideErrorKind for CreateClusterError {
372    fn code(&self) -> ::std::option::Option<&str> {
373        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
374    }
375    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
376        ::std::option::Option::None
377    }
378}
379impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for CreateClusterError {
380    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
381        match self {
382            Self::ClientException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
383            Self::InvalidParameterException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
384            Self::ResourceInUseException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
385            Self::ResourceLimitExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
386            Self::ServerException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
387            Self::ServiceUnavailableException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
388            Self::UnsupportedAvailabilityZoneException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
389            Self::Unhandled(_inner) => &_inner.meta,
390        }
391    }
392}
393impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for CreateClusterError {
394    fn create_unhandled_error(
395        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
396        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
397    ) -> Self {
398        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
399            source,
400            meta: meta.unwrap_or_default(),
401        })
402    }
403}
404impl ::aws_types::request_id::RequestId for crate::operation::create_cluster::CreateClusterError {
405    fn request_id(&self) -> Option<&str> {
406        self.meta().request_id()
407    }
408}
409
410pub use crate::operation::create_cluster::_create_cluster_output::CreateClusterOutput;
411
412pub use crate::operation::create_cluster::_create_cluster_input::CreateClusterInput;
413
414mod _create_cluster_input;
415
416mod _create_cluster_output;
417
418/// Builders
419pub mod builders;