use super::CatalogEndpoint;
use openlark_core::api::{ApiRequest, HttpMethod};
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(test, derive(strum_macros::EnumIter))]
pub enum WikiApiV1 {
NodeSearch,
}
impl WikiApiV1 {
pub fn to_url(&self) -> String {
match self {
WikiApiV1::NodeSearch => "/open-apis/wiki/v1/nodes/search".to_string(),
}
}
pub fn to_request<R>(&self) -> ApiRequest<R> {
<Self as CatalogEndpoint>::to_request(self)
}
}
impl CatalogEndpoint for WikiApiV1 {
fn to_url(&self) -> String {
WikiApiV1::to_url(self)
}
fn method(&self) -> HttpMethod {
HttpMethod::Post
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(test, derive(strum_macros::EnumIter))]
pub enum WikiApiV2 {
SpaceList,
SpaceGet(String),
SpaceCreate,
SpaceSettingUpdate(String),
SpaceGetNode,
SpaceNodeList(String),
SpaceNodeCreate(String),
SpaceMemberList(String),
SpaceMemberCreate(String),
SpaceMemberDelete(String, String), SpaceNodeMove(String, String),
SpaceNodeUpdateTitle(String, String),
SpaceNodeCopy(String, String),
SpaceNodeMoveDocsToWiki(String),
TaskGet(String),
}
impl WikiApiV2 {
pub fn to_url(&self) -> String {
match self {
WikiApiV2::SpaceList => "/open-apis/wiki/v2/spaces".to_string(),
WikiApiV2::SpaceGet(space_id) => {
format!("/open-apis/wiki/v2/spaces/{space_id}")
}
WikiApiV2::SpaceCreate => "/open-apis/wiki/v2/spaces".to_string(),
WikiApiV2::SpaceSettingUpdate(space_id) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/setting")
}
WikiApiV2::SpaceGetNode => "/open-apis/wiki/v2/spaces/get_node".to_string(),
WikiApiV2::SpaceNodeList(space_id) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/nodes")
}
WikiApiV2::SpaceNodeCreate(space_id) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/nodes")
}
WikiApiV2::SpaceMemberList(space_id) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/members")
}
WikiApiV2::SpaceMemberCreate(space_id) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/members")
}
WikiApiV2::SpaceMemberDelete(space_id, member_id) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/members/{member_id}")
}
WikiApiV2::SpaceNodeMove(space_id, node_token) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/nodes/{node_token}/move")
}
WikiApiV2::SpaceNodeUpdateTitle(space_id, node_token) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/nodes/{node_token}/update_title")
}
WikiApiV2::SpaceNodeCopy(space_id, node_token) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/nodes/{node_token}/copy")
}
WikiApiV2::SpaceNodeMoveDocsToWiki(space_id) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/nodes/move_docs_to_wiki")
}
WikiApiV2::TaskGet(task_id) => {
format!("/open-apis/wiki/v2/tasks/{task_id}")
}
}
}
pub fn to_request<R>(&self) -> ApiRequest<R> {
<Self as CatalogEndpoint>::to_request(self)
}
}
impl CatalogEndpoint for WikiApiV2 {
fn to_url(&self) -> String {
WikiApiV2::to_url(self)
}
fn method(&self) -> HttpMethod {
match self {
Self::SpaceList
| Self::SpaceGet(_)
| Self::SpaceGetNode
| Self::SpaceNodeList(_)
| Self::SpaceMemberList(_)
| Self::TaskGet(_) => HttpMethod::Get,
Self::SpaceCreate
| Self::SpaceNodeCreate(_)
| Self::SpaceMemberCreate(_)
| Self::SpaceNodeMove(_, _)
| Self::SpaceNodeUpdateTitle(_, _)
| Self::SpaceNodeCopy(_, _)
| Self::SpaceNodeMoveDocsToWiki(_) => HttpMethod::Post,
Self::SpaceSettingUpdate(_) => HttpMethod::Put,
Self::SpaceMemberDelete(_, _) => HttpMethod::Delete,
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(test, derive(strum_macros::EnumIter))]
pub enum WikiApi {
ListSpaces,
GetSpace,
CreateSpace,
ListSpaceMembers(String), CreateSpaceMember(String), DeleteSpaceMember(String, String),
UpdateSpaceSetting(String),
CreateSpaceNode(String), GetSpaceNode,
ListSpaceNodes,
MoveSpaceNode(String, String), UpdateSpaceNodeTitle(String, String), CopySpaceNode(String, String), MoveDocsToWiki(String),
GetTask(String),
SearchNodes,
}
impl WikiApi {
pub fn to_url(&self) -> String {
match self {
WikiApi::ListSpaces => "/open-apis/wiki/v2/spaces".to_string(),
WikiApi::GetSpace => "/open-apis/wiki/v2/spaces/get_node".to_string(),
WikiApi::CreateSpace => "/open-apis/wiki/v2/spaces".to_string(),
WikiApi::ListSpaceMembers(space_id) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/members")
}
WikiApi::CreateSpaceMember(space_id) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/members")
}
WikiApi::DeleteSpaceMember(space_id, member_id) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/members/{member_id}")
}
WikiApi::UpdateSpaceSetting(space_id) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/setting")
}
WikiApi::CreateSpaceNode(space_id) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/nodes")
}
WikiApi::GetSpaceNode => "/open-apis/wiki/v2/spaces/get_node".to_string(),
WikiApi::ListSpaceNodes => "/open-apis/wiki/v2/space.node/list".to_string(),
WikiApi::MoveSpaceNode(space_id, node_token) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/nodes/{node_token}/move")
}
WikiApi::UpdateSpaceNodeTitle(space_id, node_token) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/nodes/{node_token}/update_title")
}
WikiApi::CopySpaceNode(space_id, node_token) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/nodes/{node_token}/copy")
}
WikiApi::MoveDocsToWiki(space_id) => {
format!("/open-apis/wiki/v2/spaces/{space_id}/nodes/move_docs_to_wiki")
}
WikiApi::GetTask(task_id) => {
format!("/open-apis/wiki/v2/tasks/{task_id}")
}
WikiApi::SearchNodes => "/open-apis/wiki/v1/nodes/search".to_string(),
}
}
pub fn to_request<R>(&self) -> ApiRequest<R> {
<Self as CatalogEndpoint>::to_request(self)
}
}
impl CatalogEndpoint for WikiApi {
fn to_url(&self) -> String {
WikiApi::to_url(self)
}
fn method(&self) -> HttpMethod {
match self {
Self::ListSpaces
| Self::GetSpace
| Self::ListSpaceMembers(_)
| Self::GetSpaceNode
| Self::ListSpaceNodes
| Self::GetTask(_) => HttpMethod::Get,
Self::CreateSpace
| Self::CreateSpaceMember(_)
| Self::CreateSpaceNode(_)
| Self::MoveSpaceNode(_, _)
| Self::UpdateSpaceNodeTitle(_, _)
| Self::CopySpaceNode(_, _)
| Self::MoveDocsToWiki(_)
| Self::SearchNodes => HttpMethod::Post,
Self::UpdateSpaceSetting(_) => HttpMethod::Put,
Self::DeleteSpaceMember(_, _) => HttpMethod::Delete,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::common::api_endpoints::test_support::catalog_semantics_snapshot;
#[test]
fn wiki_catalog_semantics_snapshots() {
insta::assert_snapshot!(
"wiki_v1_catalog_semantics",
catalog_semantics_snapshot::<WikiApiV1>()
);
insta::assert_snapshot!(
"wiki_v2_catalog_semantics",
catalog_semantics_snapshot::<WikiApiV2>()
);
insta::assert_snapshot!(
"wiki_catalog_semantics",
catalog_semantics_snapshot::<WikiApi>()
);
}
}