open_lark/service/cloud_docs/wiki/v2/space/
list.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::*,
10 http::Transport,
11 req_option::RequestOption,
12 SDKResult,
13};
14
15#[derive(Debug, Serialize, Default)]
17pub struct ListSpaceRequest {
18 #[serde(skip)]
19 api_request: ApiRequest,
20 #[serde(skip)]
22 page_size: Option<i32>,
23 #[serde(skip)]
25 page_token: Option<String>,
26}
27
28impl ListSpaceRequest {
29 pub fn builder() -> ListSpaceRequestBuilder {
30 ListSpaceRequestBuilder::default()
31 }
32
33 pub fn new() -> Self {
34 Self::default()
35 }
36}
37
38#[derive(Default)]
39pub struct ListSpaceRequestBuilder {
40 request: ListSpaceRequest,
41}
42
43impl ListSpaceRequestBuilder {
44 pub fn page_size(mut self, page_size: i32) -> Self {
46 self.request.page_size = Some(page_size);
47 self
48 }
49
50 pub fn page_token(mut self, page_token: impl ToString) -> Self {
52 self.request.page_token = Some(page_token.to_string());
53 self
54 }
55
56 pub fn build(mut self) -> ListSpaceRequest {
57 if let Some(page_size) = self.request.page_size {
58 self.request
59 .api_request
60 .query_params
61 .insert("page_size", page_size.to_string());
62 }
63 if let Some(page_token) = &self.request.page_token {
64 self.request
65 .api_request
66 .query_params
67 .insert("page_token", page_token.clone());
68 }
69 self.request
70 }
71}
72
73#[derive(Debug, Deserialize)]
75pub struct Space {
76 pub space_id: String,
78 pub name: String,
80 #[serde(default)]
82 pub description: Option<String>,
83 pub space_type: Option<String>,
85 pub visibility: Option<String>,
87}
88
89#[derive(Debug, Deserialize)]
91pub struct ListSpaceResponse {
92 pub items: Vec<Space>,
94 #[serde(default)]
96 pub page_token: Option<String>,
97 pub has_more: bool,
99}
100
101impl ApiResponseTrait for ListSpaceResponse {
102 fn data_format() -> ResponseFormat {
103 ResponseFormat::Data
104 }
105}
106
107pub async fn list_spaces(
109 request: ListSpaceRequest,
110 config: &Config,
111 option: Option<RequestOption>,
112) -> SDKResult<BaseResponse<ListSpaceResponse>> {
113 let mut api_req = request.api_request;
114 api_req.http_method = Method::GET;
115 api_req.api_path = WIKI_V2_SPACES.to_string();
116 api_req.supported_access_token_types = vec![AccessTokenType::Tenant, AccessTokenType::User];
117
118 let api_resp = Transport::request(api_req, config, option).await?;
119 Ok(api_resp)
120}
121
122#[cfg(test)]
123#[allow(unused_variables, unused_unsafe)]
124mod tests {
125 use super::*;
126
127 #[test]
128 fn test_list_space_request_builder() {
129 let request = ListSpaceRequest::builder()
130 .page_size(20)
131 .page_token("page_token_123")
132 .build();
133
134 assert_eq!(request.page_size, Some(20));
135 assert_eq!(request.page_token, Some("page_token_123".to_string()));
136 }
137}