open_lark/service/cloud_docs/wiki/v2/space/
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 GetSpaceRequest {
18    #[serde(skip)]
19    api_request: ApiRequest,
20    /// 知识空间id
21    #[serde(skip)]
22    space_id: String,
23}
24
25impl GetSpaceRequest {
26    pub fn builder() -> GetSpaceRequestBuilder {
27        GetSpaceRequestBuilder::default()
28    }
29
30    pub fn new(space_id: impl ToString) -> Self {
31        Self {
32            space_id: space_id.to_string(),
33            ..Default::default()
34        }
35    }
36}
37
38#[derive(Default)]
39pub struct GetSpaceRequestBuilder {
40    request: GetSpaceRequest,
41}
42
43impl GetSpaceRequestBuilder {
44    /// 知识空间id
45    pub fn space_id(mut self, space_id: impl ToString) -> Self {
46        self.request.space_id = space_id.to_string();
47        self
48    }
49
50    pub fn build(self) -> GetSpaceRequest {
51        self.request
52    }
53}
54
55/// 知识空间详细信息
56#[derive(Debug, Deserialize)]
57pub struct SpaceInfo {
58    /// 知识空间id
59    pub space_id: String,
60    /// 知识空间名称
61    pub name: String,
62    /// 知识空间描述
63    #[serde(default)]
64    pub description: Option<String>,
65    /// 知识空间类型:personal(个人空间)、team(团队空间)
66    pub space_type: Option<String>,
67    /// 知识空间可见性:private(私有)、public(公开)、partial_public(部分公开)
68    pub visibility: Option<String>,
69    /// 创建时间戳(秒)
70    pub create_time: Option<i64>,
71    /// 更新时间戳(秒)
72    pub update_time: Option<i64>,
73}
74
75/// 获取知识空间信息响应
76#[derive(Debug, Deserialize)]
77pub struct GetSpaceResponse {
78    /// 知识空间信息
79    pub space: SpaceInfo,
80}
81
82impl ApiResponseTrait for GetSpaceResponse {
83    fn data_format() -> ResponseFormat {
84        ResponseFormat::Data
85    }
86}
87
88/// 获取知识空间信息
89pub async fn get_space(
90    request: GetSpaceRequest,
91    config: &Config,
92    option: Option<RequestOption>,
93) -> SDKResult<BaseResponse<GetSpaceResponse>> {
94    let mut api_req = request.api_request;
95    api_req.http_method = Method::GET;
96    api_req.api_path =
97        EndpointBuilder::replace_param(WIKI_V2_SPACE_GET, "space_id", &request.space_id);
98    api_req.supported_access_token_types = vec![AccessTokenType::Tenant, AccessTokenType::User];
99
100    let api_resp = Transport::request(api_req, config, option).await?;
101    Ok(api_resp)
102}
103
104#[cfg(test)]
105#[allow(unused_variables, unused_unsafe)]
106mod tests {
107    use super::*;
108
109    #[test]
110    fn test_get_space_request_builder() {
111        let request = GetSpaceRequest::builder().space_id("spcxxxxxx").build();
112
113        assert_eq!(request.space_id, "spcxxxxxx");
114    }
115}