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 endpoints::{cloud_docs::*, EndpointBuilder},
10 http::Transport,
11 req_option::RequestOption,
12 SDKResult,
13};
14
15#[derive(Debug, Serialize, Default)]
17pub struct GetSpaceNodeRequest {
18 #[serde(skip)]
19 api_request: ApiRequest,
20 #[serde(skip)]
22 space_id: String,
23 #[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 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 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#[derive(Debug, Deserialize)]
68pub struct SpaceNode {
69 pub space_id: String,
71 pub node_token: String,
73 pub obj_type: String,
75 pub parent_node_token: Option<String>,
77 pub node_type: Option<String>,
79 pub obj_token: Option<String>,
81 pub title: Option<String>,
83 pub obj_create_time: Option<String>,
85 pub obj_edit_time: Option<String>,
87 pub node_create_time: Option<String>,
89 pub node_creator: Option<String>,
91 pub has_child: Option<bool>,
93}
94
95#[derive(Debug, Deserialize)]
97pub struct GetSpaceNodeResponse {
98 pub node: SpaceNode,
100}
101
102impl ApiResponseTrait for GetSpaceNodeResponse {
103 fn data_format() -> ResponseFormat {
104 ResponseFormat::Data
105 }
106}
107
108pub 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}