Skip to main content

aws_sdk_codecatalyst/operation/
get_project.rs

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