open_lark/service/im/v1/message_reaction/
mod.rs1use reqwest::Method;
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5use crate::impl_full_service;
6use crate::{
7 core::{
8 api_req::ApiRequest,
9 api_resp::{ApiResponseTrait, BaseResponse, EmptyResponse, ResponseFormat},
10 config::Config,
11 constants::AccessTokenType,
12 endpoints::EndpointBuilder,
13 http::Transport,
14 req_option::RequestOption,
15 standard_response::StandardResponse,
16 SDKResult,
17 },
18 service::im::v1::models::{MessageReaction, UserIdType},
19};
20
21pub struct MessageReactionService {
23 pub config: Config,
24}
25
26#[derive(Debug, Serialize, Deserialize)]
28pub struct CreateReactionRequest {
29 pub emoji_type: String,
31}
32
33impl_full_service!(MessageReactionService, "im.message_reaction", "v1");
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct ListReactionResponse {
39 pub reactions: Vec<MessageReaction>,
41 pub has_more: bool,
43 pub page_token: Option<String>,
45}
46
47impl ApiResponseTrait for ListReactionResponse {
48 fn data_format() -> ResponseFormat {
49 ResponseFormat::Data
50 }
51}
52
53impl MessageReactionService {
54 pub fn new(config: Config) -> Self {
55 Self { config }
56 }
57 pub async fn create(
59 &self,
60 message_id: &str,
61 emoji_type: &str,
62 user_id_type: Option<UserIdType>,
63 option: Option<RequestOption>,
64 ) -> SDKResult<EmptyResponse> {
65 let mut query_params = HashMap::new();
66 if let Some(user_id_type) = user_id_type {
67 query_params.insert("user_id_type", user_id_type.as_str().to_string());
68 }
69
70 let api_req = ApiRequest {
71 http_method: Method::POST,
72 api_path: EndpointBuilder::replace_param(
73 crate::core::endpoints::im::IM_V1_MESSAGE_REACTIONS,
74 "message_id",
75 message_id,
76 ),
77 supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
78 query_params,
79 body: serde_json::to_vec(&CreateReactionRequest {
80 emoji_type: emoji_type.to_string(),
81 })?,
82 ..Default::default()
83 };
84
85 let api_resp: BaseResponse<EmptyResponse> =
86 Transport::request(api_req, &self.config, option).await?;
87 api_resp.into_result()
88 }
89
90 pub async fn list(
92 &self,
93 message_id: &str,
94 user_id_type: Option<UserIdType>,
95 page_size: Option<i32>,
96 page_token: Option<String>,
97 option: Option<RequestOption>,
98 ) -> SDKResult<ListReactionResponse> {
99 let mut query_params = HashMap::new();
100 if let Some(user_id_type) = user_id_type {
101 query_params.insert("user_id_type", user_id_type.as_str().to_string());
102 }
103 if let Some(page_size) = page_size {
104 query_params.insert("page_size", page_size.to_string());
105 }
106 if let Some(page_token) = page_token {
107 query_params.insert("page_token", page_token);
108 }
109
110 let api_req = ApiRequest {
111 http_method: Method::GET,
112 api_path: EndpointBuilder::replace_param(
113 crate::core::endpoints::im::IM_V1_MESSAGE_REACTIONS,
114 "message_id",
115 message_id,
116 ),
117 supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
118 query_params,
119 ..Default::default()
120 };
121
122 let api_resp: BaseResponse<ListReactionResponse> =
123 Transport::request(api_req, &self.config, option).await?;
124 api_resp.into_result()
125 }
126
127 pub async fn delete(
129 &self,
130 message_id: &str,
131 reaction_id: &str,
132 user_id_type: Option<UserIdType>,
133 option: Option<RequestOption>,
134 ) -> SDKResult<EmptyResponse> {
135 let mut query_params = HashMap::new();
136 if let Some(user_id_type) = user_id_type {
137 query_params.insert("user_id_type", user_id_type.as_str().to_string());
138 }
139
140 let api_req = ApiRequest {
141 http_method: Method::DELETE,
142 api_path: EndpointBuilder::replace_params_from_array(
143 crate::core::endpoints::im::IM_V1_DELETE_MESSAGE_REACTION,
144 &[("message_id", message_id), ("reaction_id", reaction_id)],
145 ),
146 supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
147 query_params,
148 ..Default::default()
149 };
150
151 let api_resp: BaseResponse<EmptyResponse> =
152 Transport::request(api_req, &self.config, option).await?;
153 api_resp.into_result()
154 }
155}