open_lark/service/cloud_docs/wiki/v2/space_node/
get.rs

1use reqwest::Method;
2use serde::{Deserialize, Serialize};
3
4use crate::core::{
5    api_req::ApiRequest,
6    api_resp::{ApiResponseTrait, BaseResponse, ResponseFormat},
7    config::Config,
8    constants::AccessTokenType,
9    endpoints::{cloud_docs::*, EndpointBuilder},
10    http::Transport,
11    req_option::RequestOption,
12    SDKResult,
13};
14
15/// 获取知识空间节点请求
16#[derive(Debug, Serialize, Default)]
17pub struct GetSpaceNodeRequest {
18    #[serde(skip)]
19    api_request: ApiRequest,
20    /// 知识空间id
21    #[serde(skip)]
22    space_id: String,
23    /// 节点token
24    #[serde(skip)]
25    node_token: String,
26}
27
28impl GetSpaceNodeRequest {
29    pub fn builder() -> GetSpaceNodeRequestBuilder {
30        GetSpaceNodeRequestBuilder::default()
31    }
32
33    pub fn new(space_id: impl ToString, node_token: impl ToString) -> Self {
34        Self {
35            space_id: space_id.to_string(),
36            node_token: node_token.to_string(),
37            ..Default::default()
38        }
39    }
40}
41
42#[derive(Default)]
43pub struct GetSpaceNodeRequestBuilder {
44    request: GetSpaceNodeRequest,
45}
46
47impl GetSpaceNodeRequestBuilder {
48    /// 知识空间id
49    pub fn space_id(mut self, space_id: impl ToString) -> Self {
50        self.request.space_id = space_id.to_string();
51        self
52    }
53
54    /// 节点token
55    pub fn node_token(mut self, node_token: impl ToString) -> Self {
56        self.request.node_token = node_token.to_string();
57        self
58    }
59
60    pub fn build(mut self) -> GetSpaceNodeRequest {
61        self.request.api_request.body = serde_json::to_vec(&self.request).unwrap();
62        self.request
63    }
64}
65
66/// 知识空间节点信息
67#[derive(Debug, Deserialize)]
68pub struct SpaceNode {
69    /// 知识空间id
70    pub space_id: String,
71    /// 节点token
72    pub node_token: String,
73    /// 文档类型
74    pub obj_type: String,
75    /// 父节点token
76    pub parent_node_token: Option<String>,
77    /// 节点类型
78    pub node_type: Option<String>,
79    /// 原始文档token
80    pub obj_token: Option<String>,
81    /// 文档标题
82    pub title: Option<String>,
83    /// 文档创建时间(毫秒时间戳)
84    pub obj_create_time: Option<String>,
85    /// 文档更新时间(毫秒时间戳)
86    pub obj_edit_time: Option<String>,
87    /// 节点创建时间(毫秒时间戳)
88    pub node_create_time: Option<String>,
89    /// 节点创建者
90    pub node_creator: Option<String>,
91    /// 是否有子节点
92    pub has_child: Option<bool>,
93}
94
95/// 获取知识空间节点响应
96#[derive(Debug, Deserialize)]
97pub struct GetSpaceNodeResponse {
98    /// 节点信息
99    pub node: SpaceNode,
100}
101
102impl ApiResponseTrait for GetSpaceNodeResponse {
103    fn data_format() -> ResponseFormat {
104        ResponseFormat::Data
105    }
106}
107
108/// 获取知识空间节点
109pub async fn get_space_node(
110    request: GetSpaceNodeRequest,
111    config: &Config,
112    option: Option<RequestOption>,
113) -> SDKResult<BaseResponse<GetSpaceNodeResponse>> {
114    let mut api_req = request.api_request;
115    api_req.http_method = Method::GET;
116    api_req.api_path = {
117        let mut path =
118            EndpointBuilder::replace_param(WIKI_V2_SPACE_NODE_GET, "space_id", &request.space_id);
119        path = EndpointBuilder::replace_param(&path, "node_token", &request.node_token);
120        path
121    };
122    api_req.supported_access_token_types = vec![AccessTokenType::Tenant, AccessTokenType::User];
123
124    let api_resp = Transport::request(api_req, config, option).await?;
125    Ok(api_resp)
126}
127
128#[cfg(test)]
129#[allow(unused_variables, unused_unsafe)]
130mod tests {
131    use super::*;
132
133    #[test]
134    fn test_get_space_node_request_builder() {
135        let request = GetSpaceNodeRequest::builder()
136            .space_id("spcxxxxxx")
137            .node_token("wikcnxxxxxx")
138            .build();
139
140        assert_eq!(request.space_id, "spcxxxxxx");
141        assert_eq!(request.node_token, "wikcnxxxxxx");
142    }
143}