Skip to main content

aws_sdk_pcs/operation/
create_compute_node_group.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `CreateComputeNodeGroup`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct CreateComputeNodeGroup;
6impl CreateComputeNodeGroup {
7    /// Creates a new `CreateComputeNodeGroup`
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_compute_node_group::CreateComputeNodeGroupInput,
14    ) -> ::std::result::Result<
15        crate::operation::create_compute_node_group::CreateComputeNodeGroupOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::create_compute_node_group::CreateComputeNodeGroupError,
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_compute_node_group::CreateComputeNodeGroupError>()
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_compute_node_group::CreateComputeNodeGroupOutput>()
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_compute_node_group::CreateComputeNodeGroupInput,
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", "CreateComputeNodeGroup", 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.CreateComputeNodeGroup",
59                "rpc.service" = "PCS",
60                "rpc.method" = "CreateComputeNodeGroup",
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_compute_node_group::CreateComputeNodeGroupInput =
76                    input.downcast_mut().expect("correct type");
77                if input.client_token.is_none() {
78                    input.client_token = ::std::option::Option::Some(token_provider.make_idempotency_token());
79                }
80            },
81        ));
82        if let ::std::option::Option::Some(config_override) = config_override {
83            for plugin in config_override.runtime_plugins.iter().cloned() {
84                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
85            }
86            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
87                config_override,
88                client_config.config.clone(),
89                &client_config.runtime_components,
90            ));
91        }
92        runtime_plugins
93    }
94}
95impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for CreateComputeNodeGroup {
96    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
97        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("CreateComputeNodeGroup");
98
99        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
100            CreateComputeNodeGroupRequestSerializer,
101        ));
102        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
103            CreateComputeNodeGroupResponseDeserializer,
104        ));
105
106        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
107            crate::config::auth::Params::builder()
108                .operation_name("CreateComputeNodeGroup")
109                .build()
110                .expect("required fields set"),
111        ));
112
113        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
114            "CreateComputeNodeGroup",
115            "PCS",
116        ));
117        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
118        signing_options.double_uri_encode = true;
119        signing_options.content_sha256_header = false;
120        signing_options.normalize_uri_path = true;
121        signing_options.payload_override = None;
122
123        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
124            signing_options,
125            ..::std::default::Default::default()
126        });
127
128        ::std::option::Option::Some(cfg.freeze())
129    }
130
131    fn runtime_components(
132        &self,
133        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
134    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
135        #[allow(unused_mut)]
136        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("CreateComputeNodeGroup")
137            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
138                CreateComputeNodeGroupTelemetryInputCaptureInterceptor,
139            ))
140            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
141                ::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default(),
142            ))
143            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
144                CreateComputeNodeGroupEndpointParamsInterceptor,
145            ))
146            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
147                crate::operation::create_compute_node_group::CreateComputeNodeGroupError,
148            >::new())
149            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
150                crate::operation::create_compute_node_group::CreateComputeNodeGroupError,
151            >::new())
152            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
153                crate::operation::create_compute_node_group::CreateComputeNodeGroupError,
154            >::new());
155
156        ::std::borrow::Cow::Owned(rcb)
157    }
158}
159
160#[derive(Debug)]
161struct CreateComputeNodeGroupTelemetryInputCaptureInterceptor;
162
163#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
164impl ::aws_smithy_runtime_api::client::interceptors::Intercept for CreateComputeNodeGroupTelemetryInputCaptureInterceptor {
165    fn name(&self) -> &'static str {
166        "CreateComputeNodeGroupTelemetryInputCaptureInterceptor"
167    }
168
169    fn read_before_execution(
170        &self,
171        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
172            '_,
173            ::aws_smithy_runtime_api::client::interceptors::context::Input,
174            ::aws_smithy_runtime_api::client::interceptors::context::Output,
175            ::aws_smithy_runtime_api::client::interceptors::context::Error,
176        >,
177        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
178    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
179        // Nothing to do unless the customer opted in by naming members to record.
180        let ::std::option::Option::Some(requested) = cfg
181            .load::<::aws_smithy_types::telemetry::RequestedTelemetryAttributes>()
182            .filter(|r| !r.is_empty())
183        else {
184            return ::std::result::Result::Ok(());
185        };
186
187        let ::std::option::Option::Some(input) = context.input().downcast_ref::<CreateComputeNodeGroupInput>() else {
188            // A mismatched input is not this interceptor's concern; skip quietly.
189            return ::std::result::Result::Ok(());
190        };
191
192        let mut captured = ::aws_smithy_types::telemetry::CapturedTelemetryAttributes::default();
193        if requested.should_capture("clusterIdentifier") {
194            if let ::std::option::Option::Some(value) = input.cluster_identifier.as_deref() {
195                captured.insert("clusterIdentifier", value);
196            }
197        }
198        if requested.should_capture("computeNodeGroupName") {
199            if let ::std::option::Option::Some(value) = input.compute_node_group_name.as_deref() {
200                captured.insert("computeNodeGroupName", value);
201            }
202        }
203        if requested.should_capture("amiId") {
204            if let ::std::option::Option::Some(value) = input.ami_id.as_deref() {
205                captured.insert("amiId", value);
206            }
207        }
208        if requested.should_capture("iamInstanceProfileArn") {
209            if let ::std::option::Option::Some(value) = input.iam_instance_profile_arn.as_deref() {
210                captured.insert("iamInstanceProfileArn", value);
211            }
212        }
213        if requested.should_capture("clientToken") {
214            if let ::std::option::Option::Some(value) = input.client_token.as_deref() {
215                captured.insert("clientToken", value);
216            }
217        }
218
219        cfg.interceptor_state().store_put(captured);
220        ::std::result::Result::Ok(())
221    }
222}
223#[derive(Debug)]
224struct CreateComputeNodeGroupResponseDeserializer;
225impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for CreateComputeNodeGroupResponseDeserializer {
226    fn deserialize_nonstreaming_with_config(
227        &self,
228        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
229        _cfg: &::aws_smithy_types::config_bag::ConfigBag,
230    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
231        let (success, status) = (response.status().is_success(), response.status().as_u16());
232        let headers = response.headers();
233        let body = response.body().bytes().expect("body loaded");
234        #[allow(unused_mut)]
235        let mut force_error = false;
236        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
237        let parse_result = if !success && status != 200 || force_error {
238            crate::protocol_serde::shape_create_compute_node_group::de_create_compute_node_group_http_error(status, headers, body)
239        } else {
240            crate::protocol_serde::shape_create_compute_node_group::de_create_compute_node_group_http_response(status, headers, body)
241        };
242        crate::protocol_serde::type_erase_result(parse_result)
243    }
244}
245#[derive(Debug)]
246struct CreateComputeNodeGroupRequestSerializer;
247impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for CreateComputeNodeGroupRequestSerializer {
248    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
249    fn serialize_input(
250        &self,
251        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
252        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
253    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
254        let input = input
255            .downcast::<crate::operation::create_compute_node_group::CreateComputeNodeGroupInput>()
256            .expect("correct type");
257        let _header_serialization_settings = _cfg
258            .load::<crate::serialization_settings::HeaderSerializationSettings>()
259            .cloned()
260            .unwrap_or_default();
261        let mut request_builder = {
262            #[allow(clippy::uninlined_format_args)]
263            fn uri_base(
264                _input: &crate::operation::create_compute_node_group::CreateComputeNodeGroupInput,
265                output: &mut ::std::string::String,
266            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
267                use ::std::fmt::Write as _;
268                ::std::write!(output, "/").expect("formatting should succeed");
269                ::std::result::Result::Ok(())
270            }
271            #[allow(clippy::unnecessary_wraps)]
272            fn update_http_builder(
273                input: &crate::operation::create_compute_node_group::CreateComputeNodeGroupInput,
274                builder: ::http_1x::request::Builder,
275            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
276                let mut uri = ::std::string::String::new();
277                uri_base(input, &mut uri)?;
278                ::std::result::Result::Ok(builder.method("POST").uri(uri))
279            }
280            let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
281            builder = _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/x-amz-json-1.0");
282            builder = _header_serialization_settings.set_default_header(
283                builder,
284                ::http_1x::header::HeaderName::from_static("x-amz-target"),
285                "AWSParallelComputingService.CreateComputeNodeGroup",
286            );
287            builder
288        };
289        let body = ::aws_smithy_types::body::SdkBody::from(
290            crate::protocol_serde::shape_create_compute_node_group::ser_create_compute_node_group_input(&input)?,
291        );
292        if let Some(content_length) = body.content_length() {
293            let content_length = content_length.to_string();
294            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
295        }
296        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
297    }
298}
299#[derive(Debug)]
300struct CreateComputeNodeGroupEndpointParamsInterceptor;
301
302#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
303impl ::aws_smithy_runtime_api::client::interceptors::Intercept for CreateComputeNodeGroupEndpointParamsInterceptor {
304    fn name(&self) -> &'static str {
305        "CreateComputeNodeGroupEndpointParamsInterceptor"
306    }
307
308    fn read_before_execution(
309        &self,
310        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
311            '_,
312            ::aws_smithy_runtime_api::client::interceptors::context::Input,
313            ::aws_smithy_runtime_api::client::interceptors::context::Output,
314            ::aws_smithy_runtime_api::client::interceptors::context::Error,
315        >,
316        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
317    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
318        let _input = context
319            .input()
320            .downcast_ref::<CreateComputeNodeGroupInput>()
321            .ok_or("failed to downcast to CreateComputeNodeGroupInput")?;
322
323        let params = crate::config::endpoint::Params::builder()
324            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
325            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
326            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
327            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
328            .build()
329            .map_err(|err| {
330                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
331            })?;
332        cfg.interceptor_state()
333            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
334        ::std::result::Result::Ok(())
335    }
336}
337
338// The get_* functions below are generated from JMESPath expressions in the
339// operationContextParams trait. They target the operation's input shape.
340
341/// Error type for the `CreateComputeNodeGroupError` operation.
342#[non_exhaustive]
343#[derive(::std::fmt::Debug)]
344pub enum CreateComputeNodeGroupError {
345    /// <p>You don't have permission to perform the action.</p>
346    /// <p><u>Examples</u></p>
347    /// <ul>
348    /// <li>
349    /// <p>The launch template instance profile doesn't pass <code>iam:PassRole</code> verification.</p></li>
350    /// <li>
351    /// <p>There is a mismatch between the account ID and cluster ID.</p></li>
352    /// <li>
353    /// <p>The cluster ID doesn't exist.</p></li>
354    /// <li>
355    /// <p>The EC2 instance isn't present.</p></li>
356    /// </ul>
357    AccessDeniedException(crate::types::error::AccessDeniedException),
358    /// <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>
359    /// <p><u>Examples</u></p>
360    /// <ul>
361    /// <li>
362    /// <p>A cluster with the same name already exists.</p></li>
363    /// <li>
364    /// <p>A cluster isn't in <code>ACTIVE</code> status.</p></li>
365    /// <li>
366    /// <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>
367    /// <li>
368    /// <p>A queue already exists in a cluster.</p></li>
369    /// </ul>
370    ConflictException(crate::types::error::ConflictException),
371    /// <p>PCS can't process your request right now. Try again later.</p>
372    InternalServerException(crate::types::error::InternalServerException),
373    /// <p>The requested resource can't be found. The cluster, node group, or queue you're attempting to get, update, list, or delete doesn't exist.</p>
374    /// <p><u>Examples</u></p>
375    ResourceNotFoundException(crate::types::error::ResourceNotFoundException),
376    /// <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>
377    /// <p><u>Examples</u></p>
378    /// <ul>
379    /// <li>
380    /// <p>The max number of clusters or queues has been reached for the account.</p></li>
381    /// <li>
382    /// <p>The max number of compute node groups has been reached for the associated cluster.</p></li>
383    /// <li>
384    /// <p>The total of <code>maxInstances</code> across all compute node groups has been reached for associated cluster.</p></li>
385    /// </ul>
386    ServiceQuotaExceededException(crate::types::error::ServiceQuotaExceededException),
387    /// <p>Your request exceeded a request rate quota. Check the resource's request rate quota and try again.</p>
388    ThrottlingException(crate::types::error::ThrottlingException),
389    /// <p>The request isn't valid.</p>
390    /// <p><u>Examples</u></p>
391    /// <ul>
392    /// <li>
393    /// <p>Your request contains malformed JSON or unsupported characters.</p></li>
394    /// <li>
395    /// <p>The scheduler version isn't supported.</p></li>
396    /// <li>
397    /// <p>There are networking related errors, such as network validation failure.</p></li>
398    /// <li>
399    /// <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>
400    /// </ul>
401    ValidationException(crate::types::error::ValidationException),
402    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
403    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
404    variable wildcard pattern and check `.code()`:
405     \
406    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
407     \
408    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-CreateComputeNodeGroupError) for what information is available for the error.")]
409    Unhandled(crate::error::sealed_unhandled::Unhandled),
410}
411impl CreateComputeNodeGroupError {
412    /// Creates the `CreateComputeNodeGroupError::Unhandled` variant from any error type.
413    pub fn unhandled(
414        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
415    ) -> Self {
416        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
417            source: err.into(),
418            meta: ::std::default::Default::default(),
419        })
420    }
421
422    /// Creates the `CreateComputeNodeGroupError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
423    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
424        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
425            source: err.clone().into(),
426            meta: err,
427        })
428    }
429    ///
430    /// Returns error metadata, which includes the error code, message,
431    /// request ID, and potentially additional information.
432    ///
433    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
434        match self {
435            Self::AccessDeniedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
436            Self::ConflictException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
437            Self::InternalServerException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
438            Self::ResourceNotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
439            Self::ServiceQuotaExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
440            Self::ThrottlingException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
441            Self::ValidationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
442            Self::Unhandled(e) => &e.meta,
443        }
444    }
445    /// Returns `true` if the error kind is `CreateComputeNodeGroupError::AccessDeniedException`.
446    pub fn is_access_denied_exception(&self) -> bool {
447        matches!(self, Self::AccessDeniedException(_))
448    }
449    /// Returns `true` if the error kind is `CreateComputeNodeGroupError::ConflictException`.
450    pub fn is_conflict_exception(&self) -> bool {
451        matches!(self, Self::ConflictException(_))
452    }
453    /// Returns `true` if the error kind is `CreateComputeNodeGroupError::InternalServerException`.
454    pub fn is_internal_server_exception(&self) -> bool {
455        matches!(self, Self::InternalServerException(_))
456    }
457    /// Returns `true` if the error kind is `CreateComputeNodeGroupError::ResourceNotFoundException`.
458    pub fn is_resource_not_found_exception(&self) -> bool {
459        matches!(self, Self::ResourceNotFoundException(_))
460    }
461    /// Returns `true` if the error kind is `CreateComputeNodeGroupError::ServiceQuotaExceededException`.
462    pub fn is_service_quota_exceeded_exception(&self) -> bool {
463        matches!(self, Self::ServiceQuotaExceededException(_))
464    }
465    /// Returns `true` if the error kind is `CreateComputeNodeGroupError::ThrottlingException`.
466    pub fn is_throttling_exception(&self) -> bool {
467        matches!(self, Self::ThrottlingException(_))
468    }
469    /// Returns `true` if the error kind is `CreateComputeNodeGroupError::ValidationException`.
470    pub fn is_validation_exception(&self) -> bool {
471        matches!(self, Self::ValidationException(_))
472    }
473}
474impl ::std::error::Error for CreateComputeNodeGroupError {
475    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
476        match self {
477            Self::AccessDeniedException(_inner) => ::std::option::Option::Some(_inner),
478            Self::ConflictException(_inner) => ::std::option::Option::Some(_inner),
479            Self::InternalServerException(_inner) => ::std::option::Option::Some(_inner),
480            Self::ResourceNotFoundException(_inner) => ::std::option::Option::Some(_inner),
481            Self::ServiceQuotaExceededException(_inner) => ::std::option::Option::Some(_inner),
482            Self::ThrottlingException(_inner) => ::std::option::Option::Some(_inner),
483            Self::ValidationException(_inner) => ::std::option::Option::Some(_inner),
484            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
485        }
486    }
487}
488impl ::std::fmt::Display for CreateComputeNodeGroupError {
489    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
490        match self {
491            Self::AccessDeniedException(_inner) => _inner.fmt(f),
492            Self::ConflictException(_inner) => _inner.fmt(f),
493            Self::InternalServerException(_inner) => _inner.fmt(f),
494            Self::ResourceNotFoundException(_inner) => _inner.fmt(f),
495            Self::ServiceQuotaExceededException(_inner) => _inner.fmt(f),
496            Self::ThrottlingException(_inner) => _inner.fmt(f),
497            Self::ValidationException(_inner) => _inner.fmt(f),
498            Self::Unhandled(_inner) => {
499                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
500                    write!(f, "unhandled error ({code})")
501                } else {
502                    f.write_str("unhandled error")
503                }
504            }
505        }
506    }
507}
508impl ::aws_smithy_types::retry::ProvideErrorKind for CreateComputeNodeGroupError {
509    fn code(&self) -> ::std::option::Option<&str> {
510        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
511    }
512    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
513        match self {
514            Self::InternalServerException(inner) => ::std::option::Option::Some(inner.retryable_error_kind()),
515            Self::ThrottlingException(inner) => ::std::option::Option::Some(inner.retryable_error_kind()),
516            _ => ::std::option::Option::None,
517        }
518    }
519}
520impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for CreateComputeNodeGroupError {
521    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
522        match self {
523            Self::AccessDeniedException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
524            Self::ConflictException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
525            Self::InternalServerException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
526            Self::ResourceNotFoundException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
527            Self::ServiceQuotaExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
528            Self::ThrottlingException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
529            Self::ValidationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
530            Self::Unhandled(_inner) => &_inner.meta,
531        }
532    }
533}
534impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for CreateComputeNodeGroupError {
535    fn create_unhandled_error(
536        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
537        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
538    ) -> Self {
539        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
540            source,
541            meta: meta.unwrap_or_default(),
542        })
543    }
544}
545impl ::aws_types::request_id::RequestId for crate::operation::create_compute_node_group::CreateComputeNodeGroupError {
546    fn request_id(&self) -> Option<&str> {
547        self.meta().request_id()
548    }
549}
550
551pub use crate::operation::create_compute_node_group::_create_compute_node_group_input::CreateComputeNodeGroupInput;
552
553pub use crate::operation::create_compute_node_group::_create_compute_node_group_output::CreateComputeNodeGroupOutput;
554
555mod _create_compute_node_group_input;
556
557mod _create_compute_node_group_output;
558
559/// Builders
560pub mod builders;