import os
application_apis = [
"application/application/v1/app/create",
"application/application/v1/app/delete",
"application/application/v1/app/get",
"application/application/v1/app/list",
"application/application/v1/app/patch",
"application/application/v1/app_visibility/get",
"application/application/v1/app_visibility/patch",
"application/application/v1/app_version/create",
"application/application/v1/app_version/delete",
"application/application/v1/app_version/get",
"application/application/v1/app_version/list",
"application/application/v1/app_version/patch",
"application/application/v1/collaborator/create",
"application/application/v1/collaborator/delete",
"application/application/v1/collaborator/list",
"application/application/v1/feedback/create",
"application/application/v1/feedback/delete",
"application/application/v1/feedback/get",
"application/application/v1/feedback/list",
"application/application/v1/management/get",
"application/application/v1/management/patch",
"application/application/v1/usage/get",
"application/application/v1/visibility/check",
]
security_apis = [
"security/acs/v1/user/create",
"security/acs/v1/user/delete",
"security/acs/v1/user/get",
"security/acs/v1/user/list",
"security/acs/v1/user/patch",
"security/acs/v1/face/create",
"security/acs/v1/face/delete",
"security/acs/v1/face/get",
"security/acs/v1/rule/create",
"security/acs/v1/rule/delete",
"security/acs/v1/rule/get",
"security/acs/v1/rule/list",
"security/acs/v1/device/create",
"security/acs/v1/device/delete",
"security/acs/v1/device/get",
"security/acs/v1/device/list",
"security/acs/v1/visitor/create",
"security/acs/v1/visitor/delete",
]
user_apis = [
"personal_settings/personal_settings/v1/system_status/create",
"personal_settings/personal_settings/v1/system_status/delete",
"personal_settings/personal_settings/v1/system_status/get",
"personal_settings/personal_settings/v1/system_status/list",
"personal_settings/personal_settings/v1/system_status/patch",
"personal_settings/personal_settings/v1/system_status/batch_open",
]
def create_api_file(crate, api_path):
parts = api_path.split("/")
if len(parts) < 4:
return
full_path = f"crates/{crate}/src/{api_path}.rs"
os.makedirs(os.path.dirname(full_path), exist_ok=True)
resource = parts[-2]
action = parts[-1]
api_name = "".join([p.capitalize() for p in resource.split("_")]) + action.capitalize()
content = f"""//! {resource} {action}
use openlark_core::{{
api::{{ApiRequest, ApiResponseTrait, ResponseFormat}},
config::Config,
http::Transport,
req_option::RequestOption,
SDKResult,
}};
use serde::{{Deserialize, Serialize}};
use std::sync::Arc;
#[derive(Debug, Clone)]
pub struct {api_name}Request {{
config: Arc<Config>,
}}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct {api_name}Response {{
pub data: Option<serde_json::Value>,
}}
impl ApiResponseTrait for {api_name}Response {{
fn data_format() -> ResponseFormat {{
ResponseFormat::Data
}}
}}
impl {api_name}Request {{
pub fn new(config: Arc<Config>) -> Self {{
Self {{ config }}
}}
pub async fn execute(self) -> SDKResult<{api_name}Response> {{
self.execute_with_options(RequestOption::default()).await
}}
pub async fn execute_with_options(
self,
option: RequestOption,
) -> SDKResult<{api_name}Response> {{
let path = "/open-apis/{api_path.replace('_', '-')}"
.replace("application", "application")
.replace("security", "acs")
.replace("personal_settings", "personal_settings");
let req: ApiRequest<{api_name}Response> = ApiRequest::get(&path);
let resp = Transport::request(req, &self.config, Some(option)).await?;
resp.data.ok_or_else(|| {{
openlark_core::error::validation_error("{resource} {action}", "响应数据为空")
}})
}}
}}
"""
with open(full_path, 'w') as f:
f.write(content)
print(f"✅ {full_path}")
print("=== Creating openlark-application APIs ===")
for api in application_apis:
create_api_file("openlark-application", api)
print("\n=== Creating openlark-security APIs ===")
for api in security_apis:
create_api_file("openlark-security", api)
print("\n=== Creating openlark-user APIs ===")
for api in user_apis:
create_api_file("openlark-user", api)
print(f"\n✅ 总共创建 {len(application_apis) + len(security_apis) + len(user_apis)} 个 API 文件")