Skip to main content

aws_sdk_pcs/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        use ::tracing::Instrument;
54        ::aws_smithy_runtime::client::orchestrator::invoke_with_stop_point("PCS", "CreateCluster", input, runtime_plugins, stop_point)
55            // Create a parent span for the entire operation. Includes a random, internal-only,
56            // seven-digit ID for the operation orchestration so that it can be correlated in the logs.
57            .instrument(::tracing::debug_span!(
58                "PCS.CreateCluster",
59                "rpc.service" = "PCS",
60                "rpc.method" = "CreateCluster",
61                "sdk_invocation_id" = ::fastrand::u32(1_000_000..10_000_000),
62                "rpc.system" = "aws-api",
63            ))
64            .await
65    }
66
67    pub(crate) fn operation_runtime_plugins(
68        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
69        client_config: &crate::config::Config,
70        config_override: ::std::option::Option<crate::config::Builder>,
71    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
72        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
73        runtime_plugins = runtime_plugins.with_operation_plugin(crate::client_idempotency_token::IdempotencyTokenRuntimePlugin::new(
74            |token_provider, input| {
75                let input: &mut crate::operation::create_cluster::CreateClusterInput = input.downcast_mut().expect("correct type");
76                if input.client_token.is_none() {
77                    input.client_token = ::std::option::Option::Some(token_provider.make_idempotency_token());
78                }
79            },
80        ));
81        if let ::std::option::Option::Some(config_override) = config_override {
82            for plugin in config_override.runtime_plugins.iter().cloned() {
83                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
84            }
85            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
86                config_override,
87                client_config.config.clone(),
88                &client_config.runtime_components,
89            ));
90        }
91        runtime_plugins
92    }
93}
94impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for CreateCluster {
95    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
96        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("CreateCluster");
97
98        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
99            CreateClusterRequestSerializer,
100        ));
101        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
102            CreateClusterResponseDeserializer,
103        ));
104
105        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
106            crate::config::auth::Params::builder()
107                .operation_name("CreateCluster")
108                .build()
109                .expect("required fields set"),
110        ));
111
112        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new("CreateCluster", "PCS"));
113        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
114        signing_options.double_uri_encode = true;
115        signing_options.content_sha256_header = false;
116        signing_options.normalize_uri_path = true;
117        signing_options.payload_override = None;
118
119        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
120            signing_options,
121            ..::std::default::Default::default()
122        });
123
124        ::std::option::Option::Some(cfg.freeze())
125    }
126
127    fn runtime_components(
128        &self,
129        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
130    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
131        #[allow(unused_mut)]
132        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("CreateCluster")
133            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
134                ::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default(),
135            ))
136            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
137                CreateClusterEndpointParamsInterceptor,
138            ))
139            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
140                crate::operation::create_cluster::CreateClusterError,
141            >::new())
142            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
143                crate::operation::create_cluster::CreateClusterError,
144            >::new())
145            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
146                crate::operation::create_cluster::CreateClusterError,
147            >::new());
148
149        ::std::borrow::Cow::Owned(rcb)
150    }
151}
152
153#[derive(Debug)]
154struct CreateClusterResponseDeserializer;
155impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for CreateClusterResponseDeserializer {
156    fn deserialize_nonstreaming_with_config(
157        &self,
158        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
159        _cfg: &::aws_smithy_types::config_bag::ConfigBag,
160    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
161        let (success, status) = (response.status().is_success(), response.status().as_u16());
162        let headers = response.headers();
163        let body = response.body().bytes().expect("body loaded");
164        #[allow(unused_mut)]
165        let mut force_error = false;
166        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
167        let parse_result = if !success && status != 200 || force_error {
168            crate::protocol_serde::shape_create_cluster::de_create_cluster_http_error(status, headers, body)
169        } else {
170            crate::protocol_serde::shape_create_cluster::de_create_cluster_http_response(status, headers, body)
171        };
172        crate::protocol_serde::type_erase_result(parse_result)
173    }
174}
175#[derive(Debug)]
176struct CreateClusterRequestSerializer;
177impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for CreateClusterRequestSerializer {
178    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
179    fn serialize_input(
180        &self,
181        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
182        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
183    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
184        let input = input
185            .downcast::<crate::operation::create_cluster::CreateClusterInput>()
186            .expect("correct type");
187        let _header_serialization_settings = _cfg
188            .load::<crate::serialization_settings::HeaderSerializationSettings>()
189            .cloned()
190            .unwrap_or_default();
191        let mut request_builder = {
192            #[allow(clippy::uninlined_format_args)]
193            fn uri_base(
194                _input: &crate::operation::create_cluster::CreateClusterInput,
195                output: &mut ::std::string::String,
196            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
197                use ::std::fmt::Write as _;
198                ::std::write!(output, "/").expect("formatting should succeed");
199                ::std::result::Result::Ok(())
200            }
201            #[allow(clippy::unnecessary_wraps)]
202            fn update_http_builder(
203                input: &crate::operation::create_cluster::CreateClusterInput,
204                builder: ::http_1x::request::Builder,
205            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
206                let mut uri = ::std::string::String::new();
207                uri_base(input, &mut uri)?;
208                ::std::result::Result::Ok(builder.method("POST").uri(uri))
209            }
210            let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
211            builder = _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/x-amz-json-1.0");
212            builder = _header_serialization_settings.set_default_header(
213                builder,
214                ::http_1x::header::HeaderName::from_static("x-amz-target"),
215                "AWSParallelComputingService.CreateCluster",
216            );
217            builder
218        };
219        let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_create_cluster::ser_create_cluster_input(&input)?);
220        if let Some(content_length) = body.content_length() {
221            let content_length = content_length.to_string();
222            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
223        }
224        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
225    }
226}
227#[derive(Debug)]
228struct CreateClusterEndpointParamsInterceptor;
229
230#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
231impl ::aws_smithy_runtime_api::client::interceptors::Intercept for CreateClusterEndpointParamsInterceptor {
232    fn name(&self) -> &'static str {
233        "CreateClusterEndpointParamsInterceptor"
234    }
235
236    fn read_before_execution(
237        &self,
238        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
239            '_,
240            ::aws_smithy_runtime_api::client::interceptors::context::Input,
241            ::aws_smithy_runtime_api::client::interceptors::context::Output,
242            ::aws_smithy_runtime_api::client::interceptors::context::Error,
243        >,
244        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
245    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
246        let _input = context
247            .input()
248            .downcast_ref::<CreateClusterInput>()
249            .ok_or("failed to downcast to CreateClusterInput")?;
250
251        let params = crate::config::endpoint::Params::builder()
252            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
253            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
254            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
255            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
256            .build()
257            .map_err(|err| {
258                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
259            })?;
260        cfg.interceptor_state()
261            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
262        ::std::result::Result::Ok(())
263    }
264}
265
266// The get_* functions below are generated from JMESPath expressions in the
267// operationContextParams trait. They target the operation's input shape.
268
269/// Error type for the `CreateClusterError` operation.
270#[non_exhaustive]
271#[derive(::std::fmt::Debug)]
272pub enum CreateClusterError {
273    /// <p>You don't have permission to perform the action.</p>
274    /// <p><u>Examples</u></p>
275    /// <ul>
276    /// <li>
277    /// <p>The launch template instance profile doesn't pass <code>iam:PassRole</code> verification.</p></li>
278    /// <li>
279    /// <p>There is a mismatch between the account ID and cluster ID.</p></li>
280    /// <li>
281    /// <p>The cluster ID doesn't exist.</p></li>
282    /// <li>
283    /// <p>The EC2 instance isn't present.</p></li>
284    /// </ul>
285    AccessDeniedException(crate::types::error::AccessDeniedException),
286    /// <p>Your request has conflicting operations. This can occur if you're trying to perform more than 1 operation on the same resource at the same time.</p>
287    /// <p><u>Examples</u></p>
288    /// <ul>
289    /// <li>
290    /// <p>A cluster with the same name already exists.</p></li>
291    /// <li>
292    /// <p>A cluster isn't in <code>ACTIVE</code> status.</p></li>
293    /// <li>
294    /// <p>A cluster to delete is in an unstable state. For example, because it still has <code>ACTIVE</code> node groups or queues.</p></li>
295    /// <li>
296    /// <p>A queue already exists in a cluster.</p></li>
297    /// </ul>
298    ConflictException(crate::types::error::ConflictException),
299    /// <p>PCS can't process your request right now. Try again later.</p>
300    InternalServerException(crate::types::error::InternalServerException),
301    /// <p>You exceeded your service quota. Service quotas, also referred to as limits, are the maximum number of service resources or operations for your Amazon Web Services account. To learn how to increase your service quota, see <a href="https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html">Requesting a quota increase</a> in the <i>Service Quotas User Guide</i></p>
302    /// <p><u>Examples</u></p>
303    /// <ul>
304    /// <li>
305    /// <p>The max number of clusters or queues has been reached for the account.</p></li>
306    /// <li>
307    /// <p>The max number of compute node groups has been reached for the associated cluster.</p></li>
308    /// <li>
309    /// <p>The total of <code>maxInstances</code> across all compute node groups has been reached for associated cluster.</p></li>
310    /// </ul>
311    ServiceQuotaExceededException(crate::types::error::ServiceQuotaExceededException),
312    /// <p>Your request exceeded a request rate quota. Check the resource's request rate quota and try again.</p>
313    ThrottlingException(crate::types::error::ThrottlingException),
314    /// <p>The request isn't valid.</p>
315    /// <p><u>Examples</u></p>
316    /// <ul>
317    /// <li>
318    /// <p>Your request contains malformed JSON or unsupported characters.</p></li>
319    /// <li>
320    /// <p>The scheduler version isn't supported.</p></li>
321    /// <li>
322    /// <p>There are networking related errors, such as network validation failure.</p></li>
323    /// <li>
324    /// <p>AMI type is <code>CUSTOM</code> and the launch template doesn't define the AMI ID, or the AMI type is AL2 and the launch template defines the AMI.</p></li>
325    /// </ul>
326    ValidationException(crate::types::error::ValidationException),
327    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
328    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
329    variable wildcard pattern and check `.code()`:
330     \
331    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
332     \
333    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-CreateClusterError) for what information is available for the error.")]
334    Unhandled(crate::error::sealed_unhandled::Unhandled),
335}
336impl CreateClusterError {
337    /// Creates the `CreateClusterError::Unhandled` variant from any error type.
338    pub fn unhandled(
339        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
340    ) -> Self {
341        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
342            source: err.into(),
343            meta: ::std::default::Default::default(),
344        })
345    }
346
347    /// Creates the `CreateClusterError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
348    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
349        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
350            source: err.clone().into(),
351            meta: err,
352        })
353    }
354    ///
355    /// Returns error metadata, which includes the error code, message,
356    /// request ID, and potentially additional information.
357    ///
358    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
359        match self {
360            Self::AccessDeniedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
361            Self::ConflictException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
362            Self::InternalServerException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
363            Self::ServiceQuotaExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
364            Self::ThrottlingException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
365            Self::ValidationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
366            Self::Unhandled(e) => &e.meta,
367        }
368    }
369    /// Returns `true` if the error kind is `CreateClusterError::AccessDeniedException`.
370    pub fn is_access_denied_exception(&self) -> bool {
371        matches!(self, Self::AccessDeniedException(_))
372    }
373    /// Returns `true` if the error kind is `CreateClusterError::ConflictException`.
374    pub fn is_conflict_exception(&self) -> bool {
375        matches!(self, Self::ConflictException(_))
376    }
377    /// Returns `true` if the error kind is `CreateClusterError::InternalServerException`.
378    pub fn is_internal_server_exception(&self) -> bool {
379        matches!(self, Self::InternalServerException(_))
380    }
381    /// Returns `true` if the error kind is `CreateClusterError::ServiceQuotaExceededException`.
382    pub fn is_service_quota_exceeded_exception(&self) -> bool {
383        matches!(self, Self::ServiceQuotaExceededException(_))
384    }
385    /// Returns `true` if the error kind is `CreateClusterError::ThrottlingException`.
386    pub fn is_throttling_exception(&self) -> bool {
387        matches!(self, Self::ThrottlingException(_))
388    }
389    /// Returns `true` if the error kind is `CreateClusterError::ValidationException`.
390    pub fn is_validation_exception(&self) -> bool {
391        matches!(self, Self::ValidationException(_))
392    }
393}
394impl ::std::error::Error for CreateClusterError {
395    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
396        match self {
397            Self::AccessDeniedException(_inner) => ::std::option::Option::Some(_inner),
398            Self::ConflictException(_inner) => ::std::option::Option::Some(_inner),
399            Self::InternalServerException(_inner) => ::std::option::Option::Some(_inner),
400            Self::ServiceQuotaExceededException(_inner) => ::std::option::Option::Some(_inner),
401            Self::ThrottlingException(_inner) => ::std::option::Option::Some(_inner),
402            Self::ValidationException(_inner) => ::std::option::Option::Some(_inner),
403            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
404        }
405    }
406}
407impl ::std::fmt::Display for CreateClusterError {
408    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
409        match self {
410            Self::AccessDeniedException(_inner) => _inner.fmt(f),
411            Self::ConflictException(_inner) => _inner.fmt(f),
412            Self::InternalServerException(_inner) => _inner.fmt(f),
413            Self::ServiceQuotaExceededException(_inner) => _inner.fmt(f),
414            Self::ThrottlingException(_inner) => _inner.fmt(f),
415            Self::ValidationException(_inner) => _inner.fmt(f),
416            Self::Unhandled(_inner) => {
417                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
418                    write!(f, "unhandled error ({code})")
419                } else {
420                    f.write_str("unhandled error")
421                }
422            }
423        }
424    }
425}
426impl ::aws_smithy_types::retry::ProvideErrorKind for CreateClusterError {
427    fn code(&self) -> ::std::option::Option<&str> {
428        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
429    }
430    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
431        match self {
432            Self::InternalServerException(inner) => ::std::option::Option::Some(inner.retryable_error_kind()),
433            Self::ThrottlingException(inner) => ::std::option::Option::Some(inner.retryable_error_kind()),
434            _ => ::std::option::Option::None,
435        }
436    }
437}
438impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for CreateClusterError {
439    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
440        match self {
441            Self::AccessDeniedException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
442            Self::ConflictException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
443            Self::InternalServerException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
444            Self::ServiceQuotaExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
445            Self::ThrottlingException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
446            Self::ValidationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
447            Self::Unhandled(_inner) => &_inner.meta,
448        }
449    }
450}
451impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for CreateClusterError {
452    fn create_unhandled_error(
453        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
454        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
455    ) -> Self {
456        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
457            source,
458            meta: meta.unwrap_or_default(),
459        })
460    }
461}
462impl ::aws_types::request_id::RequestId for crate::operation::create_cluster::CreateClusterError {
463    fn request_id(&self) -> Option<&str> {
464        self.meta().request_id()
465    }
466}
467
468pub use crate::operation::create_cluster::_create_cluster_input::CreateClusterInput;
469
470pub use crate::operation::create_cluster::_create_cluster_output::CreateClusterOutput;
471
472mod _create_cluster_input;
473
474mod _create_cluster_output;
475
476/// Builders
477pub mod builders;