Skip to main content

aws_sdk_bedrockagentcore/operation/
process_payment.rs

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