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