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