aws_sdk_codecatalyst/operation/
list_projects.rs

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