openlark-docs 0.17.0

飞书开放平台云文档服务模块 - 文档、表格、知识库API (202 APIs, 100% 覆盖,不含旧版本)
Documentation
/// 核心宏:为Builder类型自动实现ExecutableBuilder trait
///
/// 这个宏消除了手动实现重复execute方法的需要,
/// 通过声明式配置自动生成trait实现。
#[macro_export]
macro_rules! impl_executable_builder {
    (
        $builder:ty,
        $service:ty,
        $request:ty,
        $response:ty,
        $method:ident
    ) => {
        impl openlark_core::trait_system::ExecutableBuilder<$service, $request, $response>
            for $builder
        {
            fn build(self) -> $request {
                self.build()
            }

            async fn execute(self, service: &$service) -> openlark_core::SDKResult<$response> {
                let request = self.build();
                service.$method(&request, None).await
            }

            async fn execute_with_options(
                self,
                service: &$service,
                option: openlark_core::req_option::RequestOption,
            ) -> openlark_core::SDKResult<$response> {
                let request = self.build();
                service.$method(&request, Some(option)).await
            }
        }
    };
}

/// 为使用值类型参数的Builder实现ExecutableBuilder trait
#[macro_export]
macro_rules! impl_executable_builder_owned {
    (
        $builder:ty,
        $service:ty,
        $request:ty,
        $response:ty,
        $method:ident
    ) => {
        impl openlark_core::trait_system::ExecutableBuilder<$service, $request, $response>
            for $builder
        {
            fn build(self) -> $request {
                self.build()
            }

            async fn execute(self, service: &$service) -> openlark_core::SDKResult<$response> {
                let request = self.build();
                service.$method(request, None).await
            }

            async fn execute_with_options(
                self,
                service: &$service,
                option: openlark_core::req_option::RequestOption,
            ) -> openlark_core::SDKResult<$response> {
                let request = self.build();
                service.$method(request, Some(option)).await
            }
        }
    };
}
// pub use impl_executable_builder_owned; // 暂时注释掉未使用的导入