#[macro_export]
macro_rules! impl_executable_builder {
(
$builder:ty,
$service:ty,
$request:ty,
$response:ty,
$method:ident
) => {
#[async_trait::async_trait]
impl $crate::core::trait_system::ExecutableBuilder<$service, $request, $response>
for $builder
{
fn build(self) -> $request {
self.build()
}
async fn execute(self, service: &$service) -> $crate::core::SDKResult<$response> {
service.$method(&self.build(), None).await
}
async fn execute_with_options(
self,
service: &$service,
option: $crate::core::req_option::RequestOption,
) -> $crate::core::SDKResult<$response> {
service.$method(&self.build(), Some(option)).await
}
}
};
}
#[macro_export]
macro_rules! impl_executable_builder_owned {
(
$builder:ty,
$service:ty,
$request:ty,
$response:ty,
$method:ident
) => {
#[async_trait::async_trait]
impl $crate::core::trait_system::ExecutableBuilder<$service, $request, $response>
for $builder
{
fn build(self) -> $request {
self.build()
}
async fn execute(self, service: &$service) -> $crate::core::SDKResult<$response> {
service.$method(self.build(), None).await
}
async fn execute_with_options(
self,
service: &$service,
option: $crate::core::req_option::RequestOption,
) -> $crate::core::SDKResult<$response> {
service.$method(self.build(), Some(option)).await
}
}
};
}
#[macro_export]
macro_rules! impl_executable_builder_config {
(
$builder:ty,
$request:ty,
$response:ty,
$function:ident
) => {
impl $builder {
pub async fn execute(
self,
config: &$crate::core::config::Config,
) -> $crate::core::SDKResult<$response> {
$function(self.build(), config, None).await
}
pub async fn execute_with_options(
self,
config: &$crate::core::config::Config,
option: $crate::core::req_option::RequestOption,
) -> $crate::core::SDKResult<$response> {
$function(self.build(), config, Some(option)).await
}
}
};
}