open_lark/service/cloud_docs/wiki/v2/space/
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 GetSpaceRequest {
18 #[serde(skip)]
19 api_request: ApiRequest,
20 #[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 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#[derive(Debug, Deserialize)]
57pub struct SpaceInfo {
58 pub space_id: String,
60 pub name: String,
62 #[serde(default)]
64 pub description: Option<String>,
65 pub space_type: Option<String>,
67 pub visibility: Option<String>,
69 pub create_time: Option<i64>,
71 pub update_time: Option<i64>,
73}
74
75#[derive(Debug, Deserialize)]
77pub struct GetSpaceResponse {
78 pub space: SpaceInfo,
80}
81
82impl ApiResponseTrait for GetSpaceResponse {
83 fn data_format() -> ResponseFormat {
84 ResponseFormat::Data
85 }
86}
87
88pub 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}