Skip to main content

aws_sdk_ssm/operation/
send_command.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `SendCommand`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct SendCommand;
6impl SendCommand {
7    /// Creates a new `SendCommand`
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::send_command::SendCommandInput,
14    ) -> ::std::result::Result<
15        crate::operation::send_command::SendCommandOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::send_command::SendCommandError,
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::send_command::SendCommandError>()
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::send_command::SendCommandOutput>()
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::send_command::SendCommandInput,
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("SSM", "SendCommand", 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                "SSM.SendCommand",
59                "rpc.service" = "SSM",
60                "rpc.method" = "SendCommand",
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
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 SendCommand {
88    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
89        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("SendCommand");
90
91        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
92            SendCommandRequestSerializer,
93        ));
94        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
95            SendCommandResponseDeserializer,
96        ));
97
98        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
99            crate::config::auth::Params::builder()
100                .operation_name("SendCommand")
101                .build()
102                .expect("required fields set"),
103        ));
104
105        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::SensitiveOutput);
106        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new("SendCommand", "SSM"));
107        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
108        signing_options.double_uri_encode = true;
109        signing_options.content_sha256_header = false;
110        signing_options.normalize_uri_path = true;
111        signing_options.payload_override = None;
112
113        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
114            signing_options,
115            ..::std::default::Default::default()
116        });
117
118        ::std::option::Option::Some(cfg.freeze())
119    }
120
121    fn runtime_components(
122        &self,
123        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
124    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
125        #[allow(unused_mut)]
126        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("SendCommand")
127            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
128                SendCommandTelemetryInputCaptureInterceptor,
129            ))
130            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
131                ::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default(),
132            ))
133            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
134                SendCommandEndpointParamsInterceptor,
135            ))
136            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
137                crate::operation::send_command::SendCommandError,
138            >::new())
139            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
140                crate::operation::send_command::SendCommandError,
141            >::new())
142            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
143                crate::operation::send_command::SendCommandError,
144            >::new());
145
146        ::std::borrow::Cow::Owned(rcb)
147    }
148}
149
150#[derive(Debug)]
151struct SendCommandTelemetryInputCaptureInterceptor;
152
153#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
154impl ::aws_smithy_runtime_api::client::interceptors::Intercept for SendCommandTelemetryInputCaptureInterceptor {
155    fn name(&self) -> &'static str {
156        "SendCommandTelemetryInputCaptureInterceptor"
157    }
158
159    fn read_before_execution(
160        &self,
161        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
162            '_,
163            ::aws_smithy_runtime_api::client::interceptors::context::Input,
164            ::aws_smithy_runtime_api::client::interceptors::context::Output,
165            ::aws_smithy_runtime_api::client::interceptors::context::Error,
166        >,
167        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
168    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
169        // Nothing to do unless the customer opted in by naming members to record.
170        let ::std::option::Option::Some(requested) = cfg
171            .load::<::aws_smithy_types::telemetry::RequestedTelemetryAttributes>()
172            .filter(|r| !r.is_empty())
173        else {
174            return ::std::result::Result::Ok(());
175        };
176
177        let ::std::option::Option::Some(input) = context.input().downcast_ref::<SendCommandInput>() else {
178            // A mismatched input is not this interceptor's concern; skip quietly.
179            return ::std::result::Result::Ok(());
180        };
181
182        let mut captured = ::aws_smithy_types::telemetry::CapturedTelemetryAttributes::default();
183        if requested.should_capture("DocumentName") {
184            if let ::std::option::Option::Some(value) = input.document_name.as_deref() {
185                captured.insert("DocumentName", value);
186            }
187        }
188        if requested.should_capture("DocumentVersion") {
189            if let ::std::option::Option::Some(value) = input.document_version.as_deref() {
190                captured.insert("DocumentVersion", value);
191            }
192        }
193        if requested.should_capture("DocumentHash") {
194            if let ::std::option::Option::Some(value) = input.document_hash.as_deref() {
195                captured.insert("DocumentHash", value);
196            }
197        }
198        if requested.should_capture("Comment") {
199            if let ::std::option::Option::Some(value) = input.comment.as_deref() {
200                captured.insert("Comment", value);
201            }
202        }
203        if requested.should_capture("OutputS3Region") {
204            if let ::std::option::Option::Some(value) = input.output_s3_region.as_deref() {
205                captured.insert("OutputS3Region", value);
206            }
207        }
208        if requested.should_capture("OutputS3BucketName") {
209            if let ::std::option::Option::Some(value) = input.output_s3_bucket_name.as_deref() {
210                captured.insert("OutputS3BucketName", value);
211            }
212        }
213        if requested.should_capture("OutputS3KeyPrefix") {
214            if let ::std::option::Option::Some(value) = input.output_s3_key_prefix.as_deref() {
215                captured.insert("OutputS3KeyPrefix", value);
216            }
217        }
218        if requested.should_capture("MaxConcurrency") {
219            if let ::std::option::Option::Some(value) = input.max_concurrency.as_deref() {
220                captured.insert("MaxConcurrency", value);
221            }
222        }
223        if requested.should_capture("MaxErrors") {
224            if let ::std::option::Option::Some(value) = input.max_errors.as_deref() {
225                captured.insert("MaxErrors", value);
226            }
227        }
228        if requested.should_capture("ServiceRoleArn") {
229            if let ::std::option::Option::Some(value) = input.service_role_arn.as_deref() {
230                captured.insert("ServiceRoleArn", value);
231            }
232        }
233
234        cfg.interceptor_state().store_put(captured);
235        ::std::result::Result::Ok(())
236    }
237}
238#[derive(Debug)]
239struct SendCommandResponseDeserializer;
240impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for SendCommandResponseDeserializer {
241    fn deserialize_nonstreaming_with_config(
242        &self,
243        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
244        _cfg: &::aws_smithy_types::config_bag::ConfigBag,
245    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
246        let (success, status) = (response.status().is_success(), response.status().as_u16());
247        let headers = response.headers();
248        let body = response.body().bytes().expect("body loaded");
249        #[allow(unused_mut)]
250        let mut force_error = false;
251        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
252        let parse_result = if !success && status != 200 || force_error {
253            crate::protocol_serde::shape_send_command::de_send_command_http_error(status, headers, body)
254        } else {
255            crate::protocol_serde::shape_send_command::de_send_command_http_response(status, headers, body)
256        };
257        crate::protocol_serde::type_erase_result(parse_result)
258    }
259}
260#[derive(Debug)]
261struct SendCommandRequestSerializer;
262impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for SendCommandRequestSerializer {
263    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
264    fn serialize_input(
265        &self,
266        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
267        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
268    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
269        let input = input
270            .downcast::<crate::operation::send_command::SendCommandInput>()
271            .expect("correct type");
272        let _header_serialization_settings = _cfg
273            .load::<crate::serialization_settings::HeaderSerializationSettings>()
274            .cloned()
275            .unwrap_or_default();
276        let mut request_builder = {
277            #[allow(clippy::uninlined_format_args)]
278            fn uri_base(
279                _input: &crate::operation::send_command::SendCommandInput,
280                output: &mut ::std::string::String,
281            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
282                use ::std::fmt::Write as _;
283                ::std::write!(output, "/").expect("formatting should succeed");
284                ::std::result::Result::Ok(())
285            }
286            #[allow(clippy::unnecessary_wraps)]
287            fn update_http_builder(
288                input: &crate::operation::send_command::SendCommandInput,
289                builder: ::http_1x::request::Builder,
290            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
291                let mut uri = ::std::string::String::new();
292                uri_base(input, &mut uri)?;
293                ::std::result::Result::Ok(builder.method("POST").uri(uri))
294            }
295            let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
296            builder = _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/x-amz-json-1.1");
297            builder = _header_serialization_settings.set_default_header(
298                builder,
299                ::http_1x::header::HeaderName::from_static("x-amz-target"),
300                "AmazonSSM.SendCommand",
301            );
302            builder
303        };
304        let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_send_command::ser_send_command_input(&input)?);
305        if let Some(content_length) = body.content_length() {
306            let content_length = content_length.to_string();
307            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
308        }
309        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
310    }
311}
312#[derive(Debug)]
313struct SendCommandEndpointParamsInterceptor;
314
315#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
316impl ::aws_smithy_runtime_api::client::interceptors::Intercept for SendCommandEndpointParamsInterceptor {
317    fn name(&self) -> &'static str {
318        "SendCommandEndpointParamsInterceptor"
319    }
320
321    fn read_before_execution(
322        &self,
323        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
324            '_,
325            ::aws_smithy_runtime_api::client::interceptors::context::Input,
326            ::aws_smithy_runtime_api::client::interceptors::context::Output,
327            ::aws_smithy_runtime_api::client::interceptors::context::Error,
328        >,
329        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
330    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
331        let _input = context
332            .input()
333            .downcast_ref::<SendCommandInput>()
334            .ok_or("failed to downcast to SendCommandInput")?;
335
336        let params = crate::config::endpoint::Params::builder()
337            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
338            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
339            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
340            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
341            .build()
342            .map_err(|err| {
343                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
344            })?;
345        cfg.interceptor_state()
346            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
347        ::std::result::Result::Ok(())
348    }
349}
350
351// The get_* functions below are generated from JMESPath expressions in the
352// operationContextParams trait. They target the operation's input shape.
353
354/// Error type for the `SendCommandError` operation.
355#[non_exhaustive]
356#[derive(::std::fmt::Debug)]
357pub enum SendCommandError {
358    /// <p>You can't specify a managed node ID in more than one association.</p>
359    DuplicateInstanceId(crate::types::error::DuplicateInstanceId),
360    /// <p>An error occurred on the server side.</p>
361    InternalServerError(crate::types::error::InternalServerError),
362    /// <p>The specified SSM document doesn't exist.</p>
363    InvalidDocument(crate::types::error::InvalidDocument),
364    /// <p>The document version isn't valid or doesn't exist.</p>
365    InvalidDocumentVersion(crate::types::error::InvalidDocumentVersion),
366    /// <p>The following problems can cause this exception:</p>
367    /// <ul>
368    /// <li>
369    /// <p>You don't have permission to access the managed node.</p></li>
370    /// <li>
371    /// <p>Amazon Web Services Systems Manager Agent (SSM Agent) isn't running. Verify that SSM Agent is running.</p></li>
372    /// <li>
373    /// <p>SSM Agent isn't registered with the SSM endpoint. Try reinstalling SSM Agent.</p></li>
374    /// <li>
375    /// <p>The managed node isn't in a valid state. Valid states are: <code>Running</code>, <code>Pending</code>, <code>Stopped</code>, and <code>Stopping</code>. Invalid states are: <code>Shutting-down</code> and <code>Terminated</code>.</p></li>
376    /// </ul>
377    InvalidInstanceId(crate::types::error::InvalidInstanceId),
378    /// <p>One or more configuration items isn't valid. Verify that a valid Amazon Resource Name (ARN) was provided for an Amazon Simple Notification Service topic.</p>
379    InvalidNotificationConfig(crate::types::error::InvalidNotificationConfig),
380    /// <p>The S3 bucket doesn't exist.</p>
381    InvalidOutputFolder(crate::types::error::InvalidOutputFolder),
382    /// <p>You must specify values for all required parameters in the Amazon Web Services Systems Manager document (SSM document). You can only supply values to parameters defined in the SSM document.</p>
383    InvalidParameters(crate::types::error::InvalidParameters),
384    /// <p>The role name can't contain invalid characters. Also verify that you specified an IAM role for notifications that includes the required trust policy. For information about configuring the IAM role for Run Command notifications, see <a href="https://docs.aws.amazon.com/systems-manager/latest/userguide/monitoring-sns-notifications.html">Monitoring Systems Manager status changes using Amazon SNS notifications</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p>
385    InvalidRole(crate::types::error::InvalidRole),
386    /// <p>The size limit of a document is 64 KB.</p>
387    MaxDocumentSizeExceeded(crate::types::error::MaxDocumentSizeExceeded),
388    /// <p>The document doesn't support the platform type of the given managed node IDs. For example, you sent an document for a Windows managed node to a Linux node.</p>
389    UnsupportedPlatformType(crate::types::error::UnsupportedPlatformType),
390    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
391    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
392    variable wildcard pattern and check `.code()`:
393     \
394    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
395     \
396    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-SendCommandError) for what information is available for the error.")]
397    Unhandled(crate::error::sealed_unhandled::Unhandled),
398}
399impl SendCommandError {
400    /// Creates the `SendCommandError::Unhandled` variant from any error type.
401    pub fn unhandled(
402        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
403    ) -> Self {
404        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
405            source: err.into(),
406            meta: ::std::default::Default::default(),
407        })
408    }
409
410    /// Creates the `SendCommandError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
411    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
412        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
413            source: err.clone().into(),
414            meta: err,
415        })
416    }
417    ///
418    /// Returns error metadata, which includes the error code, message,
419    /// request ID, and potentially additional information.
420    ///
421    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
422        match self {
423            Self::DuplicateInstanceId(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
424            Self::InternalServerError(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
425            Self::InvalidDocument(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
426            Self::InvalidDocumentVersion(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
427            Self::InvalidInstanceId(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
428            Self::InvalidNotificationConfig(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
429            Self::InvalidOutputFolder(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
430            Self::InvalidParameters(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
431            Self::InvalidRole(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
432            Self::MaxDocumentSizeExceeded(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
433            Self::UnsupportedPlatformType(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
434            Self::Unhandled(e) => &e.meta,
435        }
436    }
437    /// Returns `true` if the error kind is `SendCommandError::DuplicateInstanceId`.
438    pub fn is_duplicate_instance_id(&self) -> bool {
439        matches!(self, Self::DuplicateInstanceId(_))
440    }
441    /// Returns `true` if the error kind is `SendCommandError::InternalServerError`.
442    pub fn is_internal_server_error(&self) -> bool {
443        matches!(self, Self::InternalServerError(_))
444    }
445    /// Returns `true` if the error kind is `SendCommandError::InvalidDocument`.
446    pub fn is_invalid_document(&self) -> bool {
447        matches!(self, Self::InvalidDocument(_))
448    }
449    /// Returns `true` if the error kind is `SendCommandError::InvalidDocumentVersion`.
450    pub fn is_invalid_document_version(&self) -> bool {
451        matches!(self, Self::InvalidDocumentVersion(_))
452    }
453    /// Returns `true` if the error kind is `SendCommandError::InvalidInstanceId`.
454    pub fn is_invalid_instance_id(&self) -> bool {
455        matches!(self, Self::InvalidInstanceId(_))
456    }
457    /// Returns `true` if the error kind is `SendCommandError::InvalidNotificationConfig`.
458    pub fn is_invalid_notification_config(&self) -> bool {
459        matches!(self, Self::InvalidNotificationConfig(_))
460    }
461    /// Returns `true` if the error kind is `SendCommandError::InvalidOutputFolder`.
462    pub fn is_invalid_output_folder(&self) -> bool {
463        matches!(self, Self::InvalidOutputFolder(_))
464    }
465    /// Returns `true` if the error kind is `SendCommandError::InvalidParameters`.
466    pub fn is_invalid_parameters(&self) -> bool {
467        matches!(self, Self::InvalidParameters(_))
468    }
469    /// Returns `true` if the error kind is `SendCommandError::InvalidRole`.
470    pub fn is_invalid_role(&self) -> bool {
471        matches!(self, Self::InvalidRole(_))
472    }
473    /// Returns `true` if the error kind is `SendCommandError::MaxDocumentSizeExceeded`.
474    pub fn is_max_document_size_exceeded(&self) -> bool {
475        matches!(self, Self::MaxDocumentSizeExceeded(_))
476    }
477    /// Returns `true` if the error kind is `SendCommandError::UnsupportedPlatformType`.
478    pub fn is_unsupported_platform_type(&self) -> bool {
479        matches!(self, Self::UnsupportedPlatformType(_))
480    }
481}
482impl ::std::error::Error for SendCommandError {
483    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
484        match self {
485            Self::DuplicateInstanceId(_inner) => ::std::option::Option::Some(_inner),
486            Self::InternalServerError(_inner) => ::std::option::Option::Some(_inner),
487            Self::InvalidDocument(_inner) => ::std::option::Option::Some(_inner),
488            Self::InvalidDocumentVersion(_inner) => ::std::option::Option::Some(_inner),
489            Self::InvalidInstanceId(_inner) => ::std::option::Option::Some(_inner),
490            Self::InvalidNotificationConfig(_inner) => ::std::option::Option::Some(_inner),
491            Self::InvalidOutputFolder(_inner) => ::std::option::Option::Some(_inner),
492            Self::InvalidParameters(_inner) => ::std::option::Option::Some(_inner),
493            Self::InvalidRole(_inner) => ::std::option::Option::Some(_inner),
494            Self::MaxDocumentSizeExceeded(_inner) => ::std::option::Option::Some(_inner),
495            Self::UnsupportedPlatformType(_inner) => ::std::option::Option::Some(_inner),
496            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
497        }
498    }
499}
500impl ::std::fmt::Display for SendCommandError {
501    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
502        match self {
503            Self::DuplicateInstanceId(_inner) => _inner.fmt(f),
504            Self::InternalServerError(_inner) => _inner.fmt(f),
505            Self::InvalidDocument(_inner) => _inner.fmt(f),
506            Self::InvalidDocumentVersion(_inner) => _inner.fmt(f),
507            Self::InvalidInstanceId(_inner) => _inner.fmt(f),
508            Self::InvalidNotificationConfig(_inner) => _inner.fmt(f),
509            Self::InvalidOutputFolder(_inner) => _inner.fmt(f),
510            Self::InvalidParameters(_inner) => _inner.fmt(f),
511            Self::InvalidRole(_inner) => _inner.fmt(f),
512            Self::MaxDocumentSizeExceeded(_inner) => _inner.fmt(f),
513            Self::UnsupportedPlatformType(_inner) => _inner.fmt(f),
514            Self::Unhandled(_inner) => {
515                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
516                    write!(f, "unhandled error ({code})")
517                } else {
518                    f.write_str("unhandled error")
519                }
520            }
521        }
522    }
523}
524impl ::aws_smithy_types::retry::ProvideErrorKind for SendCommandError {
525    fn code(&self) -> ::std::option::Option<&str> {
526        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
527    }
528    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
529        ::std::option::Option::None
530    }
531}
532impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for SendCommandError {
533    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
534        match self {
535            Self::DuplicateInstanceId(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
536            Self::InternalServerError(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
537            Self::InvalidDocument(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
538            Self::InvalidDocumentVersion(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
539            Self::InvalidInstanceId(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
540            Self::InvalidNotificationConfig(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
541            Self::InvalidOutputFolder(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
542            Self::InvalidParameters(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
543            Self::InvalidRole(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
544            Self::MaxDocumentSizeExceeded(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
545            Self::UnsupportedPlatformType(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
546            Self::Unhandled(_inner) => &_inner.meta,
547        }
548    }
549}
550impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for SendCommandError {
551    fn create_unhandled_error(
552        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
553        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
554    ) -> Self {
555        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
556            source,
557            meta: meta.unwrap_or_default(),
558        })
559    }
560}
561impl ::aws_types::request_id::RequestId for crate::operation::send_command::SendCommandError {
562    fn request_id(&self) -> Option<&str> {
563        self.meta().request_id()
564    }
565}
566
567pub use crate::operation::send_command::_send_command_input::SendCommandInput;
568
569pub use crate::operation::send_command::_send_command_output::SendCommandOutput;
570
571mod _send_command_input;
572
573mod _send_command_output;
574
575/// Builders
576pub mod builders;