open_lark/service/cloud_docs/drive/v1/
like.rs1use reqwest::Method;
2use serde::{Deserialize, Serialize};
3
4use crate::{
5 core::{
6 api_req::ApiRequest,
7 api_resp::{ApiResponseTrait, BaseResponse, ResponseFormat},
8 config::Config,
9 constants::AccessTokenType,
10 http::Transport,
11 req_option::RequestOption,
12 SDKResult,
13 },
14 impl_executable_builder_owned,
15};
16
17pub struct LikeService {
19 config: Config,
20}
21
22impl LikeService {
23 pub fn new(config: Config) -> Self {
24 Self { config }
25 }
26
27 pub async fn list_file_likes(
33 &self,
34 request: ListFileLikesRequest,
35 option: Option<RequestOption>,
36 ) -> SDKResult<BaseResponse<ListFileLikesRespData>> {
37 let mut api_req = ApiRequest {
38 http_method: Method::GET,
39 api_path: format!(
40 "/open-apis/drive/v1/files/{}/like_records",
41 request.file_token
42 ),
43 supported_access_token_types: vec![AccessTokenType::User, AccessTokenType::Tenant],
44 ..Default::default()
45 };
46
47 if let Some(page_token) = request.page_token {
49 api_req
50 .query_params
51 .insert("page_token".to_string(), page_token);
52 }
53 if let Some(page_size) = request.page_size {
54 api_req
55 .query_params
56 .insert("page_size".to_string(), page_size.to_string());
57 }
58
59 let api_resp = Transport::request(api_req, &self.config, option).await?;
60 Ok(api_resp)
61 }
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize, Default)]
66pub struct ListFileLikesRequest {
67 pub file_token: String,
69 pub page_token: Option<String>,
71 pub page_size: Option<i32>,
73}
74
75impl ListFileLikesRequest {
76 pub fn builder() -> ListFileLikesRequestBuilder {
77 ListFileLikesRequestBuilder::default()
78 }
79
80 pub fn new(file_token: impl Into<String>) -> Self {
81 Self {
82 file_token: file_token.into(),
83 page_token: None,
84 page_size: None,
85 }
86 }
87
88 pub fn with_page_token(mut self, page_token: impl Into<String>) -> Self {
89 self.page_token = Some(page_token.into());
90 self
91 }
92
93 pub fn with_page_size(mut self, page_size: i32) -> Self {
94 self.page_size = Some(page_size);
95 self
96 }
97}
98
99#[derive(Default)]
101pub struct ListFileLikesRequestBuilder {
102 request: ListFileLikesRequest,
103}
104
105impl ListFileLikesRequestBuilder {
106 pub fn file_token(mut self, file_token: impl Into<String>) -> Self {
107 self.request.file_token = file_token.into();
108 self
109 }
110
111 pub fn page_token(mut self, page_token: impl Into<String>) -> Self {
112 self.request.page_token = Some(page_token.into());
113 self
114 }
115
116 pub fn page_size(mut self, page_size: i32) -> Self {
117 self.request.page_size = Some(page_size);
118 self
119 }
120
121 pub fn build(self) -> ListFileLikesRequest {
122 self.request
123 }
124}
125
126impl_executable_builder_owned!(
127 ListFileLikesRequestBuilder,
128 LikeService,
129 ListFileLikesRequest,
130 BaseResponse<ListFileLikesRespData>,
131 list_file_likes
132);
133
134#[derive(Debug, Clone, Serialize, Deserialize)]
136pub struct ListFileLikesRespData {
137 pub has_more: bool,
139 pub page_token: Option<String>,
141 pub items: Vec<FileLikeRecord>,
143}
144
145#[derive(Debug, Clone, Serialize, Deserialize)]
146pub struct FileLikeRecord {
147 pub user_id: String,
149 pub user_name: String,
151 pub like_time: String,
153 pub avatar_url: Option<String>,
155}
156
157impl ApiResponseTrait for ListFileLikesRespData {
158 fn data_format() -> ResponseFormat {
159 ResponseFormat::Data
160 }
161}