pub const AUTH_APP_ACCESS_TOKEN: &str = "/open-apis/auth/v3/app_access_token";
pub const AUTH_TENANT_ACCESS_TOKEN: &str = "/open-apis/auth/v3/tenant_access_token";
pub const AUTH_APP_TICKET_RESEND: &str = "/open-apis/auth/v3/app_ticket/resend";
pub const WIKI_V2_SPACES: &str = "/open-apis/wiki/v2/spaces";
pub const WIKI_V2_SPACE_NODES: &str = "/open-apis/wiki/v2/spaces/{space_id}/nodes";
pub const WIKI_V2_TASKS: &str = "/open-apis/wiki/v2/tasks";
pub const IM_V1_MESSAGES: &str = "/open-apis/im/v1/messages";
pub const IM_V1_CHATS: &str = "/open-apis/im/v1/chats";
pub const IM_V1_BATCH_MESSAGES: &str = "/open-apis/im/v1/batch_messages";
pub const IM_V2_MESSAGES: &str = "/open-apis/im/v2/messages";
pub const DOCS_V1_DOCUMENTS: &str = "/open-apis/docx/v1/documents";
pub const DRIVE_V1_FILES: &str = "/open-apis/drive/v1/files";
pub const DRIVE_V1_FOLDERS: &str = "/open-apis/drive/v1/folders";
pub const DRIVE_V2_FILES: &str = "/open-apis/drive/v2/files";
pub const SEARCH_V1_DATA_SOURCES: &str = "/open-apis/search/v1/data_sources";
pub const SEARCH_V1_SCHEMA: &str = "/open-apis/search/v1/schema";
pub const SHEETS_V2_SPREADSHEETS: &str = "/open-apis/sheets/v2/spreadsheets";
pub const SHEETS_V3_SPREADSHEETS: &str = "/open-apis/sheets/v3/spreadsheets";
pub const BITABLE_V1_APPS: &str = "/open-apis/bitable/v1/apps";
pub const ATTENDANCE_V1_USER_FLOWS: &str = "/open-apis/attendance/v1/user_flows";
pub const COMMENTS_V1_COMMENTS: &str = "/open-apis/drive/v1/files/{file_token}/comments";
pub const PERMISSION_V1_SETTINGS: &str = "/open-apis/drive/permission/v1/settings";
pub const PERMISSION_V2_SETTINGS: &str = "/open-apis/drive/permission/v2/settings";
pub const BOARD_V1_WHITEBOARDS: &str = "/open-apis/board/v1/whiteboards";
pub const ASSISTANT_V1_CONVERSATIONS: &str = "/open-apis/ai/v1/conversations";
impl EndpointHelper {
pub fn replace_path_params(path: &str, params: &[(&str, &str)]) -> String {
let mut result = path.to_string();
for (key, value) in params {
let placeholder = format!("{{{key}}}");
result = result.replace(&placeholder, value);
}
result
}
pub fn has_unresolved_params(path: &str) -> bool {
path.contains('{') && path.contains('}')
}
}
pub struct EndpointHelper;
#[cfg(test)]
#[allow(unused_variables, unused_unsafe)]
mod tests {
use super::*;
#[test]
fn test_replace_path_params() {
let result =
EndpointHelper::replace_path_params(WIKI_V2_SPACE_NODES, &[("space_id", "space123")]);
assert_eq!(result, "/open-apis/wiki/v2/spaces/space123/nodes");
}
#[test]
fn test_has_unresolved_params() {
assert!(EndpointHelper::has_unresolved_params(WIKI_V2_SPACE_NODES));
assert!(!EndpointHelper::has_unresolved_params(WIKI_V2_SPACES));
}
}