Skip to main content

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