aws_sdk_codecatalyst/operation/
update_project.rs

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