open_lark/service/cloud_docs/wiki/v2/space_node/
get.rs1use 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#[derive(Debug, Serialize, Default)]
16pub struct GetSpaceNodeRequest {
17 #[serde(skip)]
18 api_request: ApiRequest,
19 #[serde(skip)]
21 space_id: String,
22 #[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 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 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#[derive(Debug, Deserialize)]
67pub struct SpaceNode {
68 pub space_id: String,
70 pub node_token: String,
72 pub obj_type: String,
74 pub parent_node_token: Option<String>,
76 pub node_type: Option<String>,
78 pub obj_token: Option<String>,
80 pub title: Option<String>,
82 pub obj_create_time: Option<String>,
84 pub obj_edit_time: Option<String>,
86 pub node_create_time: Option<String>,
88 pub node_creator: Option<String>,
90 pub has_child: Option<bool>,
92}
93
94#[derive(Debug, Deserialize)]
96pub struct GetSpaceNodeResponse {
97 pub node: SpaceNode,
99}
100
101impl ApiResponseTrait for GetSpaceNodeResponse {
102 fn data_format() -> ResponseFormat {
103 ResponseFormat::Data
104 }
105}
106
107pub 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}