aws_sdk_codecatalyst/operation/
create_dev_environment.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `CreateDevEnvironment`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct CreateDevEnvironment;
6impl CreateDevEnvironment {
7    /// Creates a new `CreateDevEnvironment`
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_dev_environment::CreateDevEnvironmentInput,
14    ) -> ::std::result::Result<
15        crate::operation::create_dev_environment::CreateDevEnvironmentOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::create_dev_environment::CreateDevEnvironmentError,
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_dev_environment::CreateDevEnvironmentError>()
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_dev_environment::CreateDevEnvironmentOutput>()
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_dev_environment::CreateDevEnvironmentInput,
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("CodeCatalyst", "CreateDevEnvironment", 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                "CodeCatalyst.CreateDevEnvironment",
59                "rpc.service" = "CodeCatalyst",
60                "rpc.method" = "CreateDevEnvironment",
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 CreateDevEnvironment {
88    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
89        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("CreateDevEnvironment");
90
91        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
92            CreateDevEnvironmentRequestSerializer,
93        ));
94        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
95            CreateDevEnvironmentResponseDeserializer,
96        ));
97
98        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
99            crate::config::auth::Params::builder()
100                .operation_name("CreateDevEnvironment")
101                .build()
102                .expect("required fields set"),
103        ));
104
105        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
106            "CreateDevEnvironment",
107            "CodeCatalyst",
108        ));
109
110        ::std::option::Option::Some(cfg.freeze())
111    }
112
113    fn runtime_components(
114        &self,
115        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
116    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
117        #[allow(unused_mut)]
118        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("CreateDevEnvironment")
119            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
120            .with_interceptor(CreateDevEnvironmentEndpointParamsInterceptor)
121            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
122                crate::operation::create_dev_environment::CreateDevEnvironmentError,
123            >::new())
124            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
125                crate::operation::create_dev_environment::CreateDevEnvironmentError,
126            >::new())
127            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
128                crate::operation::create_dev_environment::CreateDevEnvironmentError,
129            >::new());
130
131        ::std::borrow::Cow::Owned(rcb)
132    }
133}
134
135#[derive(Debug)]
136struct CreateDevEnvironmentResponseDeserializer;
137impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for CreateDevEnvironmentResponseDeserializer {
138    fn deserialize_nonstreaming(
139        &self,
140        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
141    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
142        let (success, status) = (response.status().is_success(), response.status().as_u16());
143        let headers = response.headers();
144        let body = response.body().bytes().expect("body loaded");
145        #[allow(unused_mut)]
146        let mut force_error = false;
147        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
148        let parse_result = if !success && status != 201 || force_error {
149            crate::protocol_serde::shape_create_dev_environment::de_create_dev_environment_http_error(status, headers, body)
150        } else {
151            crate::protocol_serde::shape_create_dev_environment::de_create_dev_environment_http_response(status, headers, body)
152        };
153        crate::protocol_serde::type_erase_result(parse_result)
154    }
155}
156#[derive(Debug)]
157struct CreateDevEnvironmentRequestSerializer;
158impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for CreateDevEnvironmentRequestSerializer {
159    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
160    fn serialize_input(
161        &self,
162        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
163        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
164    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
165        let input = input
166            .downcast::<crate::operation::create_dev_environment::CreateDevEnvironmentInput>()
167            .expect("correct type");
168        let _header_serialization_settings = _cfg
169            .load::<crate::serialization_settings::HeaderSerializationSettings>()
170            .cloned()
171            .unwrap_or_default();
172        let mut request_builder = {
173            fn uri_base(
174                _input: &crate::operation::create_dev_environment::CreateDevEnvironmentInput,
175                output: &mut ::std::string::String,
176            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
177                use ::std::fmt::Write as _;
178                let input_1 = &_input.space_name;
179                let input_1 = input_1
180                    .as_ref()
181                    .ok_or_else(|| ::aws_smithy_types::error::operation::BuildError::missing_field("space_name", "cannot be empty or unset"))?;
182                let space_name = ::aws_smithy_http::label::fmt_string(input_1, ::aws_smithy_http::label::EncodingStrategy::Default);
183                if space_name.is_empty() {
184                    return ::std::result::Result::Err(::aws_smithy_types::error::operation::BuildError::missing_field(
185                        "space_name",
186                        "cannot be empty or unset",
187                    ));
188                }
189                let input_2 = &_input.project_name;
190                let input_2 = input_2
191                    .as_ref()
192                    .ok_or_else(|| ::aws_smithy_types::error::operation::BuildError::missing_field("project_name", "cannot be empty or unset"))?;
193                let project_name = ::aws_smithy_http::label::fmt_string(input_2, ::aws_smithy_http::label::EncodingStrategy::Default);
194                if project_name.is_empty() {
195                    return ::std::result::Result::Err(::aws_smithy_types::error::operation::BuildError::missing_field(
196                        "project_name",
197                        "cannot be empty or unset",
198                    ));
199                }
200                ::std::write!(
201                    output,
202                    "/v1/spaces/{spaceName}/projects/{projectName}/devEnvironments",
203                    spaceName = space_name,
204                    projectName = project_name
205                )
206                .expect("formatting should succeed");
207                ::std::result::Result::Ok(())
208            }
209            #[allow(clippy::unnecessary_wraps)]
210            fn update_http_builder(
211                input: &crate::operation::create_dev_environment::CreateDevEnvironmentInput,
212                builder: ::http::request::Builder,
213            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
214                let mut uri = ::std::string::String::new();
215                uri_base(input, &mut uri)?;
216                ::std::result::Result::Ok(builder.method("PUT").uri(uri))
217            }
218            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
219            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/json");
220            builder
221        };
222        let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_create_dev_environment::ser_create_dev_environment_input(
223            &input,
224        )?);
225        if let Some(content_length) = body.content_length() {
226            let content_length = content_length.to_string();
227            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
228        }
229        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
230    }
231}
232#[derive(Debug)]
233struct CreateDevEnvironmentEndpointParamsInterceptor;
234
235impl ::aws_smithy_runtime_api::client::interceptors::Intercept for CreateDevEnvironmentEndpointParamsInterceptor {
236    fn name(&self) -> &'static str {
237        "CreateDevEnvironmentEndpointParamsInterceptor"
238    }
239
240    fn read_before_execution(
241        &self,
242        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
243            '_,
244            ::aws_smithy_runtime_api::client::interceptors::context::Input,
245            ::aws_smithy_runtime_api::client::interceptors::context::Output,
246            ::aws_smithy_runtime_api::client::interceptors::context::Error,
247        >,
248        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
249    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
250        let _input = context
251            .input()
252            .downcast_ref::<CreateDevEnvironmentInput>()
253            .ok_or("failed to downcast to CreateDevEnvironmentInput")?;
254
255        let params = crate::config::endpoint::Params::builder()
256            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
257            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
258            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
259            .build()
260            .map_err(|err| {
261                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
262            })?;
263        cfg.interceptor_state()
264            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
265        ::std::result::Result::Ok(())
266    }
267}
268
269// The get_* functions below are generated from JMESPath expressions in the
270// operationContextParams trait. They target the operation's input shape.
271
272/// Error type for the `CreateDevEnvironmentError` operation.
273#[non_exhaustive]
274#[derive(::std::fmt::Debug)]
275pub enum CreateDevEnvironmentError {
276    /// <p>The request was denied because you don't have sufficient access to perform this action. Verify that you are a member of a role that allows this action.</p>
277    AccessDeniedException(crate::types::error::AccessDeniedException),
278    /// <p>The request was denied because the requested operation would cause a conflict with the current state of a service resource associated with the request. Another user might have updated the resource. Reload, make sure you have the latest data, and then try again.</p>
279    ConflictException(crate::types::error::ConflictException),
280    /// <p>The request was denied because the specified resource was not found. Verify that the spelling is correct and that you have access to the resource.</p>
281    ResourceNotFoundException(crate::types::error::ResourceNotFoundException),
282    /// <p>The request was denied because one or more resources has reached its limits for the tier the space belongs to. Either reduce the number of resources, or change the tier if applicable.</p>
283    ServiceQuotaExceededException(crate::types::error::ServiceQuotaExceededException),
284    /// <p>The request was denied due to request throttling.</p>
285    ThrottlingException(crate::types::error::ThrottlingException),
286    /// <p>The request was denied because an input failed to satisfy the constraints specified by the service. Check the spelling and input requirements, and then try again.</p>
287    ValidationException(crate::types::error::ValidationException),
288    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
289    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
290    variable wildcard pattern and check `.code()`:
291     \
292    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
293     \
294    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-CreateDevEnvironmentError) for what information is available for the error.")]
295    Unhandled(crate::error::sealed_unhandled::Unhandled),
296}
297impl CreateDevEnvironmentError {
298    /// Creates the `CreateDevEnvironmentError::Unhandled` variant from any error type.
299    pub fn unhandled(
300        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
301    ) -> Self {
302        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
303            source: err.into(),
304            meta: ::std::default::Default::default(),
305        })
306    }
307
308    /// Creates the `CreateDevEnvironmentError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
309    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
310        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
311            source: err.clone().into(),
312            meta: err,
313        })
314    }
315    ///
316    /// Returns error metadata, which includes the error code, message,
317    /// request ID, and potentially additional information.
318    ///
319    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
320        match self {
321            Self::AccessDeniedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
322            Self::ConflictException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
323            Self::ResourceNotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
324            Self::ServiceQuotaExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
325            Self::ThrottlingException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
326            Self::ValidationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
327            Self::Unhandled(e) => &e.meta,
328        }
329    }
330    /// Returns `true` if the error kind is `CreateDevEnvironmentError::AccessDeniedException`.
331    pub fn is_access_denied_exception(&self) -> bool {
332        matches!(self, Self::AccessDeniedException(_))
333    }
334    /// Returns `true` if the error kind is `CreateDevEnvironmentError::ConflictException`.
335    pub fn is_conflict_exception(&self) -> bool {
336        matches!(self, Self::ConflictException(_))
337    }
338    /// Returns `true` if the error kind is `CreateDevEnvironmentError::ResourceNotFoundException`.
339    pub fn is_resource_not_found_exception(&self) -> bool {
340        matches!(self, Self::ResourceNotFoundException(_))
341    }
342    /// Returns `true` if the error kind is `CreateDevEnvironmentError::ServiceQuotaExceededException`.
343    pub fn is_service_quota_exceeded_exception(&self) -> bool {
344        matches!(self, Self::ServiceQuotaExceededException(_))
345    }
346    /// Returns `true` if the error kind is `CreateDevEnvironmentError::ThrottlingException`.
347    pub fn is_throttling_exception(&self) -> bool {
348        matches!(self, Self::ThrottlingException(_))
349    }
350    /// Returns `true` if the error kind is `CreateDevEnvironmentError::ValidationException`.
351    pub fn is_validation_exception(&self) -> bool {
352        matches!(self, Self::ValidationException(_))
353    }
354}
355impl ::std::error::Error for CreateDevEnvironmentError {
356    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
357        match self {
358            Self::AccessDeniedException(_inner) => ::std::option::Option::Some(_inner),
359            Self::ConflictException(_inner) => ::std::option::Option::Some(_inner),
360            Self::ResourceNotFoundException(_inner) => ::std::option::Option::Some(_inner),
361            Self::ServiceQuotaExceededException(_inner) => ::std::option::Option::Some(_inner),
362            Self::ThrottlingException(_inner) => ::std::option::Option::Some(_inner),
363            Self::ValidationException(_inner) => ::std::option::Option::Some(_inner),
364            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
365        }
366    }
367}
368impl ::std::fmt::Display for CreateDevEnvironmentError {
369    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
370        match self {
371            Self::AccessDeniedException(_inner) => _inner.fmt(f),
372            Self::ConflictException(_inner) => _inner.fmt(f),
373            Self::ResourceNotFoundException(_inner) => _inner.fmt(f),
374            Self::ServiceQuotaExceededException(_inner) => _inner.fmt(f),
375            Self::ThrottlingException(_inner) => _inner.fmt(f),
376            Self::ValidationException(_inner) => _inner.fmt(f),
377            Self::Unhandled(_inner) => {
378                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
379                    write!(f, "unhandled error ({code})")
380                } else {
381                    f.write_str("unhandled error")
382                }
383            }
384        }
385    }
386}
387impl ::aws_smithy_types::retry::ProvideErrorKind for CreateDevEnvironmentError {
388    fn code(&self) -> ::std::option::Option<&str> {
389        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
390    }
391    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
392        match self {
393            Self::ThrottlingException(inner) => ::std::option::Option::Some(inner.retryable_error_kind()),
394            _ => ::std::option::Option::None,
395        }
396    }
397}
398impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for CreateDevEnvironmentError {
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::ResourceNotFoundException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
404            Self::ServiceQuotaExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
405            Self::ThrottlingException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
406            Self::ValidationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
407            Self::Unhandled(_inner) => &_inner.meta,
408        }
409    }
410}
411impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for CreateDevEnvironmentError {
412    fn create_unhandled_error(
413        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
414        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
415    ) -> Self {
416        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
417            source,
418            meta: meta.unwrap_or_default(),
419        })
420    }
421}
422impl ::aws_types::request_id::RequestId for crate::operation::create_dev_environment::CreateDevEnvironmentError {
423    fn request_id(&self) -> Option<&str> {
424        self.meta().request_id()
425    }
426}
427
428pub use crate::operation::create_dev_environment::_create_dev_environment_output::CreateDevEnvironmentOutput;
429
430pub use crate::operation::create_dev_environment::_create_dev_environment_input::CreateDevEnvironmentInput;
431
432mod _create_dev_environment_input;
433
434mod _create_dev_environment_output;
435
436/// Builders
437pub mod builders;