pub(crate) mod internal {
pub type BoxFuture<T> = ::std::pin::Pin<::std::boxed::Box<dyn ::std::future::Future<Output = T> + ::std::marker::Send>>;
pub type SendResult<T, E> =
::std::result::Result<T, ::aws_smithy_http::result::SdkError<E, ::aws_smithy_runtime_api::client::orchestrator::HttpResponse>>;
pub trait CustomizableSend<T, E>: ::std::marker::Send + ::std::marker::Sync {
fn send(self, config_override: crate::config::Builder) -> BoxFuture<SendResult<T, E>>;
}
}
pub mod orchestrator {
pub struct CustomizableOperation<T, E, B> {
customizable_send: B,
config_override: ::std::option::Option<crate::config::Builder>,
interceptors: Vec<::aws_smithy_runtime_api::client::interceptors::SharedInterceptor>,
runtime_plugins: Vec<::aws_smithy_runtime_api::client::runtime_plugin::SharedRuntimePlugin>,
_output: ::std::marker::PhantomData<T>,
_error: ::std::marker::PhantomData<E>,
}
impl<T, E, B> CustomizableOperation<T, E, B> {
pub(crate) fn new(customizable_send: B) -> Self {
Self {
customizable_send,
config_override: ::std::option::Option::None,
interceptors: vec![],
runtime_plugins: vec![],
_output: ::std::marker::PhantomData,
_error: ::std::marker::PhantomData,
}
}
pub fn interceptor(mut self, interceptor: impl ::aws_smithy_runtime_api::client::interceptors::Interceptor + 'static) -> Self {
self.interceptors
.push(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::new(interceptor));
self
}
#[allow(unused)]
pub(crate) fn runtime_plugin(
mut self,
runtime_plugin: impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin + 'static,
) -> Self {
self.runtime_plugins
.push(::aws_smithy_runtime_api::client::runtime_plugin::SharedRuntimePlugin::new(runtime_plugin));
self
}
pub fn map_request<F, MapE>(mut self, f: F) -> Self
where
F: ::std::ops::Fn(
::aws_smithy_runtime_api::client::orchestrator::HttpRequest,
) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, MapE>
+ ::std::marker::Send
+ ::std::marker::Sync
+ 'static,
MapE: ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static,
{
self.interceptors
.push(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::new(
::aws_smithy_runtime::client::interceptors::MapRequestInterceptor::new(f),
));
self
}
pub fn mutate_request<F>(mut self, f: F) -> Self
where
F: ::std::ops::Fn(&mut http::Request<::aws_smithy_http::body::SdkBody>) + ::std::marker::Send + ::std::marker::Sync + 'static,
{
self.interceptors
.push(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::new(
::aws_smithy_runtime::client::interceptors::MutateRequestInterceptor::new(f),
));
self
}
pub fn config_override(mut self, config_override: impl ::std::convert::Into<crate::config::Builder>) -> Self {
self.config_override = Some(config_override.into());
self
}
pub async fn send(self) -> crate::client::customize::internal::SendResult<T, E>
where
E: std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static,
B: crate::client::customize::internal::CustomizableSend<T, E>,
{
let mut config_override = if let Some(config_override) = self.config_override {
config_override
} else {
crate::config::Builder::new()
};
self.interceptors.into_iter().for_each(|interceptor| {
config_override.push_interceptor(interceptor);
});
self.runtime_plugins.into_iter().for_each(|plugin| {
config_override.push_runtime_plugin(plugin);
});
self.customizable_send.send(config_override).await
}
#[doc(hidden)]
pub fn request_time_for_tests(self, request_time: ::std::time::SystemTime) -> Self {
self.runtime_plugin(
::aws_smithy_runtime_api::client::runtime_plugin::StaticRuntimePlugin::new().with_runtime_components(
::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("request_time_for_tests").with_time_source(
Some(::aws_smithy_async::time::SharedTimeSource::new(
::aws_smithy_async::time::StaticTimeSource::new(request_time),
)),
),
),
)
}
#[doc(hidden)]
pub fn user_agent_for_tests(mut self) -> Self {
let interceptor = crate::client::customize::TestParamsSetterInterceptor::new(
|context: &mut ::aws_smithy_runtime_api::client::interceptors::context::BeforeTransmitInterceptorContextMut<'_>,
_: &mut ::aws_smithy_types::config_bag::ConfigBag| {
let headers = context.request_mut().headers_mut();
let user_agent = ::aws_http::user_agent::AwsUserAgent::for_tests();
headers.insert(::http::header::USER_AGENT, ::http::HeaderValue::try_from(user_agent.ua_header()).unwrap());
headers.insert(
::http::HeaderName::from_static("x-amz-user-agent"),
::http::HeaderValue::try_from(user_agent.aws_ua_header()).unwrap(),
);
},
);
self.interceptors
.push(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::new(interceptor));
self
}
#[doc(hidden)]
pub fn remove_invocation_id_for_tests(mut self) -> Self {
let interceptor = crate::client::customize::TestParamsSetterInterceptor::new(
|context: &mut ::aws_smithy_runtime_api::client::interceptors::context::BeforeTransmitInterceptorContextMut<'_>,
_: &mut ::aws_smithy_types::config_bag::ConfigBag| {
context.request_mut().headers_mut().remove("amz-sdk-invocation-id");
},
);
self.interceptors
.push(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::new(interceptor));
self
}
}
}
mod test_params_setter_interceptor {
use aws_smithy_runtime_api::box_error::BoxError;
use aws_smithy_runtime_api::client::interceptors::context::BeforeTransmitInterceptorContextMut;
use aws_smithy_runtime_api::client::interceptors::Interceptor;
use aws_smithy_runtime_api::client::runtime_components::RuntimeComponents;
use aws_smithy_types::config_bag::ConfigBag;
use std::fmt;
pub(super) struct TestParamsSetterInterceptor<F> {
f: F,
}
impl<F> fmt::Debug for TestParamsSetterInterceptor<F> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "TestParamsSetterInterceptor")
}
}
impl<F> TestParamsSetterInterceptor<F> {
pub fn new(f: F) -> Self {
Self { f }
}
}
impl<F> Interceptor for TestParamsSetterInterceptor<F>
where
F: Fn(&mut BeforeTransmitInterceptorContextMut<'_>, &mut ConfigBag) + Send + Sync + 'static,
{
fn name(&self) -> &'static str {
"TestParamsSetterInterceptor"
}
fn modify_before_signing(
&self,
context: &mut BeforeTransmitInterceptorContextMut<'_>,
_runtime_components: &RuntimeComponents,
cfg: &mut ConfigBag,
) -> Result<(), BoxError> {
(self.f)(context, cfg);
Ok(())
}
}
}
use test_params_setter_interceptor::TestParamsSetterInterceptor;