use super::CatalogEndpoint;
use openlark_core::api::{ApiRequest, HttpMethod};
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(test, derive(strum_macros::EnumIter))]
pub enum DocxApiV1 {
ChatAnnouncementGet(String),
ChatAnnouncementBlockList(String),
ChatAnnouncementBlockChildrenCreate(String, String),
ChatAnnouncementBlockBatchUpdate(String),
ChatAnnouncementBlockGet(String, String),
ChatAnnouncementBlockChildrenGet(String, String),
ChatAnnouncementBlockChildrenBatchDelete(String, String),
DocumentCreate,
DocumentGet(String),
DocumentRawContent(String),
DocumentBlockList(String),
DocumentBlockChildrenCreate(String, String),
DocumentBlockDescendantCreate(String, String),
DocumentBlockPatch(String, String),
DocumentBlockGet(String, String),
DocumentBlockBatchUpdate(String),
DocumentBlockChildrenGet(String, String),
DocumentBlockChildrenBatchDelete(String, String),
DocumentConvert,
}
impl DocxApiV1 {
pub fn to_url(&self) -> String {
match self {
DocxApiV1::ChatAnnouncementGet(chat_id) => {
format!("/open-apis/docx/v1/chats/{chat_id}/announcement")
}
DocxApiV1::ChatAnnouncementBlockList(chat_id) => {
format!("/open-apis/docx/v1/chats/{chat_id}/announcement/blocks")
}
DocxApiV1::ChatAnnouncementBlockChildrenCreate(chat_id, block_id) => {
format!(
"/open-apis/docx/v1/chats/{chat_id}/announcement/blocks/{block_id}/children"
)
}
DocxApiV1::ChatAnnouncementBlockBatchUpdate(chat_id) => {
format!("/open-apis/docx/v1/chats/{chat_id}/announcement/blocks/batch_update")
}
DocxApiV1::ChatAnnouncementBlockGet(chat_id, block_id) => {
format!("/open-apis/docx/v1/chats/{chat_id}/announcement/blocks/{block_id}")
}
DocxApiV1::ChatAnnouncementBlockChildrenGet(chat_id, block_id) => {
format!(
"/open-apis/docx/v1/chats/{chat_id}/announcement/blocks/{block_id}/children"
)
}
DocxApiV1::ChatAnnouncementBlockChildrenBatchDelete(chat_id, block_id) => {
format!(
"/open-apis/docx/v1/chats/{chat_id}/announcement/blocks/{block_id}/children/batch_delete"
)
}
DocxApiV1::DocumentCreate => "/open-apis/docx/v1/documents".to_string(),
DocxApiV1::DocumentGet(document_id) => {
format!("/open-apis/docx/v1/documents/{document_id}")
}
DocxApiV1::DocumentRawContent(document_id) => {
format!("/open-apis/docx/v1/documents/{document_id}/raw_content")
}
DocxApiV1::DocumentBlockList(document_id) => {
format!("/open-apis/docx/v1/documents/{document_id}/blocks")
}
DocxApiV1::DocumentBlockChildrenCreate(document_id, block_id) => {
format!("/open-apis/docx/v1/documents/{document_id}/blocks/{block_id}/children")
}
DocxApiV1::DocumentBlockDescendantCreate(document_id, block_id) => {
format!("/open-apis/docx/v1/documents/{document_id}/blocks/{block_id}/descendant")
}
DocxApiV1::DocumentBlockPatch(document_id, block_id) => {
format!("/open-apis/docx/v1/documents/{document_id}/blocks/{block_id}")
}
DocxApiV1::DocumentBlockGet(document_id, block_id) => {
format!("/open-apis/docx/v1/documents/{document_id}/blocks/{block_id}")
}
DocxApiV1::DocumentBlockBatchUpdate(document_id) => {
format!("/open-apis/docx/v1/documents/{document_id}/blocks/batch_update")
}
DocxApiV1::DocumentBlockChildrenGet(document_id, block_id) => {
format!("/open-apis/docx/v1/documents/{document_id}/blocks/{block_id}/children")
}
DocxApiV1::DocumentBlockChildrenBatchDelete(document_id, block_id) => {
format!(
"/open-apis/docx/v1/documents/{document_id}/blocks/{block_id}/children/batch_delete"
)
}
DocxApiV1::DocumentConvert => "/open-apis/docx/documents/blocks/convert".to_string(),
}
}
pub fn to_request<R>(&self) -> ApiRequest<R> {
<Self as CatalogEndpoint>::to_request(self)
}
}
impl CatalogEndpoint for DocxApiV1 {
fn to_url(&self) -> String {
DocxApiV1::to_url(self)
}
fn method(&self) -> HttpMethod {
match self {
Self::ChatAnnouncementGet(_)
| Self::ChatAnnouncementBlockList(_)
| Self::ChatAnnouncementBlockGet(_, _)
| Self::ChatAnnouncementBlockChildrenGet(_, _)
| Self::DocumentGet(_)
| Self::DocumentRawContent(_)
| Self::DocumentBlockList(_)
| Self::DocumentBlockGet(_, _)
| Self::DocumentBlockChildrenGet(_, _) => HttpMethod::Get,
Self::ChatAnnouncementBlockChildrenCreate(_, _)
| Self::DocumentCreate
| Self::DocumentBlockChildrenCreate(_, _)
| Self::DocumentBlockDescendantCreate(_, _)
| Self::DocumentConvert => HttpMethod::Post,
Self::ChatAnnouncementBlockBatchUpdate(_)
| Self::DocumentBlockPatch(_, _)
| Self::DocumentBlockBatchUpdate(_) => HttpMethod::Patch,
Self::ChatAnnouncementBlockChildrenBatchDelete(_, _)
| Self::DocumentBlockChildrenBatchDelete(_, _) => HttpMethod::Delete,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::common::api_endpoints::test_support::catalog_semantics_snapshot;
#[test]
fn docx_catalog_semantics_snapshot() {
insta::assert_snapshot!(catalog_semantics_snapshot::<DocxApiV1>());
}
}