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