Skip to main content

aws_sdk_supportapp/operation/
create_slack_channel_configuration.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `CreateSlackChannelConfiguration`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct CreateSlackChannelConfiguration;
6impl CreateSlackChannelConfiguration {
7    /// Creates a new `CreateSlackChannelConfiguration`
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_slack_channel_configuration::CreateSlackChannelConfigurationInput,
14    ) -> ::std::result::Result<
15        crate::operation::create_slack_channel_configuration::CreateSlackChannelConfigurationOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::create_slack_channel_configuration::CreateSlackChannelConfigurationError,
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_slack_channel_configuration::CreateSlackChannelConfigurationError>()
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_slack_channel_configuration::CreateSlackChannelConfigurationOutput>()
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_slack_channel_configuration::CreateSlackChannelConfigurationInput,
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(
55            "Support App",
56            "CreateSlackChannelConfiguration",
57            input,
58            runtime_plugins,
59            stop_point,
60        )
61        // Create a parent span for the entire operation. Includes a random, internal-only,
62        // seven-digit ID for the operation orchestration so that it can be correlated in the logs.
63        .instrument(::tracing::debug_span!(
64            "Support App.CreateSlackChannelConfiguration",
65            "rpc.service" = "Support App",
66            "rpc.method" = "CreateSlackChannelConfiguration",
67            "sdk_invocation_id" = ::fastrand::u32(1_000_000..10_000_000),
68            "rpc.system" = "aws-api",
69        ))
70        .await
71    }
72
73    pub(crate) fn operation_runtime_plugins(
74        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
75        client_config: &crate::config::Config,
76        config_override: ::std::option::Option<crate::config::Builder>,
77    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
78        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
79
80        if let ::std::option::Option::Some(config_override) = config_override {
81            for plugin in config_override.runtime_plugins.iter().cloned() {
82                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
83            }
84            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
85                config_override,
86                client_config.config.clone(),
87                &client_config.runtime_components,
88            ));
89        }
90        runtime_plugins
91    }
92}
93impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for CreateSlackChannelConfiguration {
94    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
95        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("CreateSlackChannelConfiguration");
96
97        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
98            CreateSlackChannelConfigurationRequestSerializer,
99        ));
100        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
101            CreateSlackChannelConfigurationResponseDeserializer,
102        ));
103
104        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
105            crate::config::auth::Params::builder()
106                .operation_name("CreateSlackChannelConfiguration")
107                .build()
108                .expect("required fields set"),
109        ));
110
111        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
112            "CreateSlackChannelConfiguration",
113            "Support App",
114        ));
115        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
116        signing_options.double_uri_encode = true;
117        signing_options.content_sha256_header = false;
118        signing_options.normalize_uri_path = true;
119        signing_options.payload_override = None;
120
121        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
122            signing_options,
123            ..::std::default::Default::default()
124        });
125
126        ::std::option::Option::Some(cfg.freeze())
127    }
128
129    fn runtime_components(
130        &self,
131        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
132    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
133        #[allow(unused_mut)]
134        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("CreateSlackChannelConfiguration")
135            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
136                ::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default(),
137            ))
138            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
139                CreateSlackChannelConfigurationEndpointParamsInterceptor,
140            ))
141            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
142                crate::operation::create_slack_channel_configuration::CreateSlackChannelConfigurationError,
143            >::new())
144            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
145                crate::operation::create_slack_channel_configuration::CreateSlackChannelConfigurationError,
146            >::new())
147            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
148                crate::operation::create_slack_channel_configuration::CreateSlackChannelConfigurationError,
149            >::new());
150
151        ::std::borrow::Cow::Owned(rcb)
152    }
153}
154
155#[derive(Debug)]
156struct CreateSlackChannelConfigurationResponseDeserializer;
157impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for CreateSlackChannelConfigurationResponseDeserializer {
158    fn deserialize_nonstreaming_with_config(
159        &self,
160        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
161        _cfg: &::aws_smithy_types::config_bag::ConfigBag,
162    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
163        let (success, status) = (response.status().is_success(), response.status().as_u16());
164        let headers = response.headers();
165        let body = response.body().bytes().expect("body loaded");
166        #[allow(unused_mut)]
167        let mut force_error = false;
168        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
169        let parse_result = if !success && status != 200 || force_error {
170            crate::protocol_serde::shape_create_slack_channel_configuration::de_create_slack_channel_configuration_http_error(status, headers, body)
171        } else {
172            crate::protocol_serde::shape_create_slack_channel_configuration::de_create_slack_channel_configuration_http_response(
173                status, headers, body,
174            )
175        };
176        crate::protocol_serde::type_erase_result(parse_result)
177    }
178}
179#[derive(Debug)]
180struct CreateSlackChannelConfigurationRequestSerializer;
181impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for CreateSlackChannelConfigurationRequestSerializer {
182    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
183    fn serialize_input(
184        &self,
185        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
186        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
187    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
188        let input = input
189            .downcast::<crate::operation::create_slack_channel_configuration::CreateSlackChannelConfigurationInput>()
190            .expect("correct type");
191        let _header_serialization_settings = _cfg
192            .load::<crate::serialization_settings::HeaderSerializationSettings>()
193            .cloned()
194            .unwrap_or_default();
195        let mut request_builder = {
196            #[allow(clippy::uninlined_format_args)]
197            fn uri_base(
198                _input: &crate::operation::create_slack_channel_configuration::CreateSlackChannelConfigurationInput,
199                output: &mut ::std::string::String,
200            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
201                use ::std::fmt::Write as _;
202                ::std::write!(output, "/control/create-slack-channel-configuration").expect("formatting should succeed");
203                ::std::result::Result::Ok(())
204            }
205            #[allow(clippy::unnecessary_wraps)]
206            fn update_http_builder(
207                input: &crate::operation::create_slack_channel_configuration::CreateSlackChannelConfigurationInput,
208                builder: ::http_1x::request::Builder,
209            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
210                let mut uri = ::std::string::String::new();
211                uri_base(input, &mut uri)?;
212                ::std::result::Result::Ok(builder.method("POST").uri(uri))
213            }
214            let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
215            builder = _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/json");
216            builder
217        };
218        let body = ::aws_smithy_types::body::SdkBody::from(
219            crate::protocol_serde::shape_create_slack_channel_configuration::ser_create_slack_channel_configuration_input(&input)?,
220        );
221        if let Some(content_length) = body.content_length() {
222            let content_length = content_length.to_string();
223            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
224        }
225        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
226    }
227}
228#[derive(Debug)]
229struct CreateSlackChannelConfigurationEndpointParamsInterceptor;
230
231#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
232impl ::aws_smithy_runtime_api::client::interceptors::Intercept for CreateSlackChannelConfigurationEndpointParamsInterceptor {
233    fn name(&self) -> &'static str {
234        "CreateSlackChannelConfigurationEndpointParamsInterceptor"
235    }
236
237    fn read_before_execution(
238        &self,
239        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
240            '_,
241            ::aws_smithy_runtime_api::client::interceptors::context::Input,
242            ::aws_smithy_runtime_api::client::interceptors::context::Output,
243            ::aws_smithy_runtime_api::client::interceptors::context::Error,
244        >,
245        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
246    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
247        let _input = context
248            .input()
249            .downcast_ref::<CreateSlackChannelConfigurationInput>()
250            .ok_or("failed to downcast to CreateSlackChannelConfigurationInput")?;
251
252        let params = crate::config::endpoint::Params::builder()
253            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
254            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
255            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
256            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
257            .build()
258            .map_err(|err| {
259                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
260            })?;
261        cfg.interceptor_state()
262            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
263        ::std::result::Result::Ok(())
264    }
265}
266
267// The get_* functions below are generated from JMESPath expressions in the
268// operationContextParams trait. They target the operation's input shape.
269
270/// Error type for the `CreateSlackChannelConfigurationError` operation.
271#[non_exhaustive]
272#[derive(::std::fmt::Debug)]
273pub enum CreateSlackChannelConfigurationError {
274    /// <p>You don't have sufficient permission to perform this action.</p>
275    AccessDeniedException(crate::types::error::AccessDeniedException),
276    /// <p>Your request has a conflict. For example, you might receive this error if you try the following:</p>
277    /// <ul>
278    /// <li>
279    /// <p>Add, update, or delete a Slack channel configuration before you add a Slack workspace to your Amazon Web Services account.</p></li>
280    /// <li>
281    /// <p>Add a Slack channel configuration that already exists in your Amazon Web Services account.</p></li>
282    /// <li>
283    /// <p>Delete a Slack channel configuration for a live chat channel.</p></li>
284    /// <li>
285    /// <p>Delete a Slack workspace from your Amazon Web Services account that has an active live chat channel.</p></li>
286    /// <li>
287    /// <p>Call the <code>RegisterSlackWorkspaceForOrganization</code> API from an Amazon Web Services account that doesn't belong to an organization.</p></li>
288    /// <li>
289    /// <p>Call the <code>RegisterSlackWorkspaceForOrganization</code> API from a member account, but the management account hasn't registered that workspace yet for the organization.</p></li>
290    /// </ul>
291    ConflictException(crate::types::error::ConflictException),
292    /// <p>We can’t process your request right now because of a server issue. Try again later.</p>
293    InternalServerException(crate::types::error::InternalServerException),
294    /// <p>Your Service Quotas request exceeds the quota for the service. For example, your Service Quotas request to Amazon Web Services Support App might exceed the maximum number of workspaces or channels per account, or the maximum number of accounts per Slack channel.</p>
295    ServiceQuotaExceededException(crate::types::error::ServiceQuotaExceededException),
296    /// <p>Your request input doesn't meet the constraints that the Amazon Web Services Support App specifies.</p>
297    ValidationException(crate::types::error::ValidationException),
298    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
299    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
300    variable wildcard pattern and check `.code()`:
301     \
302    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
303     \
304    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-CreateSlackChannelConfigurationError) for what information is available for the error.")]
305    Unhandled(crate::error::sealed_unhandled::Unhandled),
306}
307impl CreateSlackChannelConfigurationError {
308    /// Creates the `CreateSlackChannelConfigurationError::Unhandled` variant from any error type.
309    pub fn unhandled(
310        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
311    ) -> Self {
312        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
313            source: err.into(),
314            meta: ::std::default::Default::default(),
315        })
316    }
317
318    /// Creates the `CreateSlackChannelConfigurationError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
319    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
320        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
321            source: err.clone().into(),
322            meta: err,
323        })
324    }
325    ///
326    /// Returns error metadata, which includes the error code, message,
327    /// request ID, and potentially additional information.
328    ///
329    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
330        match self {
331            Self::AccessDeniedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
332            Self::ConflictException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
333            Self::InternalServerException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
334            Self::ServiceQuotaExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
335            Self::ValidationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
336            Self::Unhandled(e) => &e.meta,
337        }
338    }
339    /// Returns `true` if the error kind is `CreateSlackChannelConfigurationError::AccessDeniedException`.
340    pub fn is_access_denied_exception(&self) -> bool {
341        matches!(self, Self::AccessDeniedException(_))
342    }
343    /// Returns `true` if the error kind is `CreateSlackChannelConfigurationError::ConflictException`.
344    pub fn is_conflict_exception(&self) -> bool {
345        matches!(self, Self::ConflictException(_))
346    }
347    /// Returns `true` if the error kind is `CreateSlackChannelConfigurationError::InternalServerException`.
348    pub fn is_internal_server_exception(&self) -> bool {
349        matches!(self, Self::InternalServerException(_))
350    }
351    /// Returns `true` if the error kind is `CreateSlackChannelConfigurationError::ServiceQuotaExceededException`.
352    pub fn is_service_quota_exceeded_exception(&self) -> bool {
353        matches!(self, Self::ServiceQuotaExceededException(_))
354    }
355    /// Returns `true` if the error kind is `CreateSlackChannelConfigurationError::ValidationException`.
356    pub fn is_validation_exception(&self) -> bool {
357        matches!(self, Self::ValidationException(_))
358    }
359}
360impl ::std::error::Error for CreateSlackChannelConfigurationError {
361    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
362        match self {
363            Self::AccessDeniedException(_inner) => ::std::option::Option::Some(_inner),
364            Self::ConflictException(_inner) => ::std::option::Option::Some(_inner),
365            Self::InternalServerException(_inner) => ::std::option::Option::Some(_inner),
366            Self::ServiceQuotaExceededException(_inner) => ::std::option::Option::Some(_inner),
367            Self::ValidationException(_inner) => ::std::option::Option::Some(_inner),
368            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
369        }
370    }
371}
372impl ::std::fmt::Display for CreateSlackChannelConfigurationError {
373    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
374        match self {
375            Self::AccessDeniedException(_inner) => _inner.fmt(f),
376            Self::ConflictException(_inner) => _inner.fmt(f),
377            Self::InternalServerException(_inner) => _inner.fmt(f),
378            Self::ServiceQuotaExceededException(_inner) => _inner.fmt(f),
379            Self::ValidationException(_inner) => _inner.fmt(f),
380            Self::Unhandled(_inner) => {
381                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
382                    write!(f, "unhandled error ({code})")
383                } else {
384                    f.write_str("unhandled error")
385                }
386            }
387        }
388    }
389}
390impl ::aws_smithy_types::retry::ProvideErrorKind for CreateSlackChannelConfigurationError {
391    fn code(&self) -> ::std::option::Option<&str> {
392        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
393    }
394    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
395        ::std::option::Option::None
396    }
397}
398impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for CreateSlackChannelConfigurationError {
399    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
400        match self {
401            Self::AccessDeniedException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
402            Self::ConflictException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
403            Self::InternalServerException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
404            Self::ServiceQuotaExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
405            Self::ValidationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
406            Self::Unhandled(_inner) => &_inner.meta,
407        }
408    }
409}
410impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for CreateSlackChannelConfigurationError {
411    fn create_unhandled_error(
412        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
413        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
414    ) -> Self {
415        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
416            source,
417            meta: meta.unwrap_or_default(),
418        })
419    }
420}
421impl ::aws_types::request_id::RequestId for crate::operation::create_slack_channel_configuration::CreateSlackChannelConfigurationError {
422    fn request_id(&self) -> Option<&str> {
423        self.meta().request_id()
424    }
425}
426
427pub use crate::operation::create_slack_channel_configuration::_create_slack_channel_configuration_input::CreateSlackChannelConfigurationInput;
428
429pub use crate::operation::create_slack_channel_configuration::_create_slack_channel_configuration_output::CreateSlackChannelConfigurationOutput;
430
431mod _create_slack_channel_configuration_input;
432
433mod _create_slack_channel_configuration_output;
434
435/// Builders
436pub mod builders;