aws_sdk_wickr/operation/
update_security_group.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `UpdateSecurityGroup`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct UpdateSecurityGroup;
6impl UpdateSecurityGroup {
7    /// Creates a new `UpdateSecurityGroup`
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::update_security_group::UpdateSecurityGroupInput,
14    ) -> ::std::result::Result<
15        crate::operation::update_security_group::UpdateSecurityGroupOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::update_security_group::UpdateSecurityGroupError,
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::update_security_group::UpdateSecurityGroupError>()
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::update_security_group::UpdateSecurityGroupOutput>()
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::update_security_group::UpdateSecurityGroupInput,
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("Wickr", "UpdateSecurityGroup", 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                "Wickr.UpdateSecurityGroup",
59                "rpc.service" = "Wickr",
60                "rpc.method" = "UpdateSecurityGroup",
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 UpdateSecurityGroup {
88    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
89        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("UpdateSecurityGroup");
90
91        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
92            UpdateSecurityGroupRequestSerializer,
93        ));
94        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
95            UpdateSecurityGroupResponseDeserializer,
96        ));
97
98        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
99            crate::config::auth::Params::builder()
100                .operation_name("UpdateSecurityGroup")
101                .build()
102                .expect("required fields set"),
103        ));
104
105        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
106            "UpdateSecurityGroup",
107            "Wickr",
108        ));
109        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
110        signing_options.double_uri_encode = true;
111        signing_options.content_sha256_header = false;
112        signing_options.normalize_uri_path = true;
113        signing_options.payload_override = None;
114
115        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
116            signing_options,
117            ..::std::default::Default::default()
118        });
119
120        ::std::option::Option::Some(cfg.freeze())
121    }
122
123    fn runtime_components(
124        &self,
125        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
126    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
127        #[allow(unused_mut)]
128        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("UpdateSecurityGroup")
129            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
130            .with_interceptor(UpdateSecurityGroupEndpointParamsInterceptor)
131            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
132                crate::operation::update_security_group::UpdateSecurityGroupError,
133            >::new())
134            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
135                crate::operation::update_security_group::UpdateSecurityGroupError,
136            >::new())
137            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
138                crate::operation::update_security_group::UpdateSecurityGroupError,
139            >::new());
140
141        ::std::borrow::Cow::Owned(rcb)
142    }
143}
144
145#[derive(Debug)]
146struct UpdateSecurityGroupResponseDeserializer;
147impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for UpdateSecurityGroupResponseDeserializer {
148    fn deserialize_nonstreaming(
149        &self,
150        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
151    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
152        let (success, status) = (response.status().is_success(), response.status().as_u16());
153        let headers = response.headers();
154        let body = response.body().bytes().expect("body loaded");
155        #[allow(unused_mut)]
156        let mut force_error = false;
157        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
158        let parse_result = if !success && status != 200 || force_error {
159            crate::protocol_serde::shape_update_security_group::de_update_security_group_http_error(status, headers, body)
160        } else {
161            crate::protocol_serde::shape_update_security_group::de_update_security_group_http_response(status, headers, body)
162        };
163        crate::protocol_serde::type_erase_result(parse_result)
164    }
165}
166#[derive(Debug)]
167struct UpdateSecurityGroupRequestSerializer;
168impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for UpdateSecurityGroupRequestSerializer {
169    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
170    fn serialize_input(
171        &self,
172        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
173        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
174    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
175        let input = input
176            .downcast::<crate::operation::update_security_group::UpdateSecurityGroupInput>()
177            .expect("correct type");
178        let _header_serialization_settings = _cfg
179            .load::<crate::serialization_settings::HeaderSerializationSettings>()
180            .cloned()
181            .unwrap_or_default();
182        let mut request_builder = {
183            #[allow(clippy::uninlined_format_args)]
184            fn uri_base(
185                _input: &crate::operation::update_security_group::UpdateSecurityGroupInput,
186                output: &mut ::std::string::String,
187            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
188                use ::std::fmt::Write as _;
189                let input_1 = &_input.network_id;
190                let input_1 = input_1
191                    .as_ref()
192                    .ok_or_else(|| ::aws_smithy_types::error::operation::BuildError::missing_field("network_id", "cannot be empty or unset"))?;
193                let network_id = ::aws_smithy_http::label::fmt_string(input_1, ::aws_smithy_http::label::EncodingStrategy::Default);
194                if network_id.is_empty() {
195                    return ::std::result::Result::Err(::aws_smithy_types::error::operation::BuildError::missing_field(
196                        "network_id",
197                        "cannot be empty or unset",
198                    ));
199                }
200                let input_2 = &_input.group_id;
201                let input_2 = input_2
202                    .as_ref()
203                    .ok_or_else(|| ::aws_smithy_types::error::operation::BuildError::missing_field("group_id", "cannot be empty or unset"))?;
204                let group_id = ::aws_smithy_http::label::fmt_string(input_2, ::aws_smithy_http::label::EncodingStrategy::Default);
205                if group_id.is_empty() {
206                    return ::std::result::Result::Err(::aws_smithy_types::error::operation::BuildError::missing_field(
207                        "group_id",
208                        "cannot be empty or unset",
209                    ));
210                }
211                ::std::write!(
212                    output,
213                    "/networks/{networkId}/security-groups/{groupId}",
214                    networkId = network_id,
215                    groupId = group_id
216                )
217                .expect("formatting should succeed");
218                ::std::result::Result::Ok(())
219            }
220            #[allow(clippy::unnecessary_wraps)]
221            fn update_http_builder(
222                input: &crate::operation::update_security_group::UpdateSecurityGroupInput,
223                builder: ::http::request::Builder,
224            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
225                let mut uri = ::std::string::String::new();
226                uri_base(input, &mut uri)?;
227                ::std::result::Result::Ok(builder.method("PATCH").uri(uri))
228            }
229            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
230            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/json");
231            builder
232        };
233        let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_update_security_group::ser_update_security_group_input(
234            &input,
235        )?);
236        if let Some(content_length) = body.content_length() {
237            let content_length = content_length.to_string();
238            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
239        }
240        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
241    }
242}
243#[derive(Debug)]
244struct UpdateSecurityGroupEndpointParamsInterceptor;
245
246impl ::aws_smithy_runtime_api::client::interceptors::Intercept for UpdateSecurityGroupEndpointParamsInterceptor {
247    fn name(&self) -> &'static str {
248        "UpdateSecurityGroupEndpointParamsInterceptor"
249    }
250
251    fn read_before_execution(
252        &self,
253        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
254            '_,
255            ::aws_smithy_runtime_api::client::interceptors::context::Input,
256            ::aws_smithy_runtime_api::client::interceptors::context::Output,
257            ::aws_smithy_runtime_api::client::interceptors::context::Error,
258        >,
259        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
260    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
261        let _input = context
262            .input()
263            .downcast_ref::<UpdateSecurityGroupInput>()
264            .ok_or("failed to downcast to UpdateSecurityGroupInput")?;
265
266        let params = crate::config::endpoint::Params::builder()
267            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
268            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
269            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
270            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
271            .build()
272            .map_err(|err| {
273                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
274            })?;
275        cfg.interceptor_state()
276            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
277        ::std::result::Result::Ok(())
278    }
279}
280
281// The get_* functions below are generated from JMESPath expressions in the
282// operationContextParams trait. They target the operation's input shape.
283
284/// Error type for the `UpdateSecurityGroupError` operation.
285#[non_exhaustive]
286#[derive(::std::fmt::Debug)]
287pub enum UpdateSecurityGroupError {
288    /// <p>The request was invalid or malformed. This error occurs when the request parameters do not meet the API requirements, such as invalid field values, missing required parameters, or improperly formatted data.</p>
289    BadRequestError(crate::types::error::BadRequestError),
290    /// <p>Access to the requested resource is forbidden. This error occurs when the authenticated user does not have the necessary permissions to perform the requested operation, even though they are authenticated.</p>
291    ForbiddenError(crate::types::error::ForbiddenError),
292    /// <p>An unexpected error occurred on the server while processing the request. This indicates a problem with the Wickr service itself rather than with the request. If this error persists, contact Amazon Web Services Support.</p>
293    InternalServerError(crate::types::error::InternalServerError),
294    /// <p>The request was throttled because too many requests were sent in a short period of time. Wait a moment and retry the request. Consider implementing exponential backoff in your application.</p>
295    RateLimitError(crate::types::error::RateLimitError),
296    /// <p>The requested resource could not be found. This error occurs when you try to access or modify a network, user, bot, security group, or other resource that doesn't exist or has been deleted.</p>
297    ResourceNotFoundError(crate::types::error::ResourceNotFoundError),
298    /// <p>The request was not authenticated or the authentication credentials were invalid. This error occurs when the request lacks valid authentication credentials or the credentials have expired.</p>
299    UnauthorizedError(crate::types::error::UnauthorizedError),
300    /// <p>One or more fields in the request failed validation. This error provides detailed information about which fields were invalid and why, allowing you to correct the request and retry.</p>
301    ValidationError(crate::types::error::ValidationError),
302    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
303    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
304    variable wildcard pattern and check `.code()`:
305     \
306    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
307     \
308    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-UpdateSecurityGroupError) for what information is available for the error.")]
309    Unhandled(crate::error::sealed_unhandled::Unhandled),
310}
311impl UpdateSecurityGroupError {
312    /// Creates the `UpdateSecurityGroupError::Unhandled` variant from any error type.
313    pub fn unhandled(
314        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
315    ) -> Self {
316        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
317            source: err.into(),
318            meta: ::std::default::Default::default(),
319        })
320    }
321
322    /// Creates the `UpdateSecurityGroupError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
323    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
324        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
325            source: err.clone().into(),
326            meta: err,
327        })
328    }
329    ///
330    /// Returns error metadata, which includes the error code, message,
331    /// request ID, and potentially additional information.
332    ///
333    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
334        match self {
335            Self::BadRequestError(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
336            Self::ForbiddenError(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
337            Self::InternalServerError(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
338            Self::RateLimitError(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
339            Self::ResourceNotFoundError(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
340            Self::UnauthorizedError(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
341            Self::ValidationError(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
342            Self::Unhandled(e) => &e.meta,
343        }
344    }
345    /// Returns `true` if the error kind is `UpdateSecurityGroupError::BadRequestError`.
346    pub fn is_bad_request_error(&self) -> bool {
347        matches!(self, Self::BadRequestError(_))
348    }
349    /// Returns `true` if the error kind is `UpdateSecurityGroupError::ForbiddenError`.
350    pub fn is_forbidden_error(&self) -> bool {
351        matches!(self, Self::ForbiddenError(_))
352    }
353    /// Returns `true` if the error kind is `UpdateSecurityGroupError::InternalServerError`.
354    pub fn is_internal_server_error(&self) -> bool {
355        matches!(self, Self::InternalServerError(_))
356    }
357    /// Returns `true` if the error kind is `UpdateSecurityGroupError::RateLimitError`.
358    pub fn is_rate_limit_error(&self) -> bool {
359        matches!(self, Self::RateLimitError(_))
360    }
361    /// Returns `true` if the error kind is `UpdateSecurityGroupError::ResourceNotFoundError`.
362    pub fn is_resource_not_found_error(&self) -> bool {
363        matches!(self, Self::ResourceNotFoundError(_))
364    }
365    /// Returns `true` if the error kind is `UpdateSecurityGroupError::UnauthorizedError`.
366    pub fn is_unauthorized_error(&self) -> bool {
367        matches!(self, Self::UnauthorizedError(_))
368    }
369    /// Returns `true` if the error kind is `UpdateSecurityGroupError::ValidationError`.
370    pub fn is_validation_error(&self) -> bool {
371        matches!(self, Self::ValidationError(_))
372    }
373}
374impl ::std::error::Error for UpdateSecurityGroupError {
375    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
376        match self {
377            Self::BadRequestError(_inner) => ::std::option::Option::Some(_inner),
378            Self::ForbiddenError(_inner) => ::std::option::Option::Some(_inner),
379            Self::InternalServerError(_inner) => ::std::option::Option::Some(_inner),
380            Self::RateLimitError(_inner) => ::std::option::Option::Some(_inner),
381            Self::ResourceNotFoundError(_inner) => ::std::option::Option::Some(_inner),
382            Self::UnauthorizedError(_inner) => ::std::option::Option::Some(_inner),
383            Self::ValidationError(_inner) => ::std::option::Option::Some(_inner),
384            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
385        }
386    }
387}
388impl ::std::fmt::Display for UpdateSecurityGroupError {
389    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
390        match self {
391            Self::BadRequestError(_inner) => _inner.fmt(f),
392            Self::ForbiddenError(_inner) => _inner.fmt(f),
393            Self::InternalServerError(_inner) => _inner.fmt(f),
394            Self::RateLimitError(_inner) => _inner.fmt(f),
395            Self::ResourceNotFoundError(_inner) => _inner.fmt(f),
396            Self::UnauthorizedError(_inner) => _inner.fmt(f),
397            Self::ValidationError(_inner) => _inner.fmt(f),
398            Self::Unhandled(_inner) => {
399                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
400                    write!(f, "unhandled error ({code})")
401                } else {
402                    f.write_str("unhandled error")
403                }
404            }
405        }
406    }
407}
408impl ::aws_smithy_types::retry::ProvideErrorKind for UpdateSecurityGroupError {
409    fn code(&self) -> ::std::option::Option<&str> {
410        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
411    }
412    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
413        ::std::option::Option::None
414    }
415}
416impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for UpdateSecurityGroupError {
417    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
418        match self {
419            Self::BadRequestError(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
420            Self::ForbiddenError(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
421            Self::InternalServerError(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
422            Self::RateLimitError(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
423            Self::ResourceNotFoundError(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
424            Self::UnauthorizedError(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
425            Self::ValidationError(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
426            Self::Unhandled(_inner) => &_inner.meta,
427        }
428    }
429}
430impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for UpdateSecurityGroupError {
431    fn create_unhandled_error(
432        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
433        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
434    ) -> Self {
435        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
436            source,
437            meta: meta.unwrap_or_default(),
438        })
439    }
440}
441impl ::aws_types::request_id::RequestId for crate::operation::update_security_group::UpdateSecurityGroupError {
442    fn request_id(&self) -> Option<&str> {
443        self.meta().request_id()
444    }
445}
446
447pub use crate::operation::update_security_group::_update_security_group_output::UpdateSecurityGroupOutput;
448
449pub use crate::operation::update_security_group::_update_security_group_input::UpdateSecurityGroupInput;
450
451mod _update_security_group_input;
452
453mod _update_security_group_output;
454
455/// Builders
456pub mod builders;