open_lark/service/im/v1/message_card/
mod.rs1use reqwest::Method;
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4
5use crate::core::{
6 api_req::ApiRequest,
7 api_resp::{ApiResponseTrait, BaseResponse, EmptyResponse, ResponseFormat},
8 config::Config,
9 constants::AccessTokenType,
10 endpoints::EndpointBuilder,
11 http::Transport,
12 req_option::RequestOption,
13 SDKResult,
14};
15use crate::impl_full_service;
16
17pub struct MessageCardService {
19 pub config: Config,
20}
21
22#[derive(Debug, Serialize, Deserialize)]
24pub struct PatchMessageCardRequest {
25 pub card: Value,
27 #[serde(skip_serializing_if = "Option::is_none")]
29 pub token: Option<String>,
30}
31
32impl_full_service!(MessageCardService, "im.message_card", "v1");
34
35#[derive(Debug, Serialize, Deserialize)]
37pub struct DelayUpdateMessageCardRequest {
38 pub delay: i32,
40 pub card: Value,
42 #[serde(skip_serializing_if = "Option::is_none")]
44 pub token: Option<String>,
45}
46
47#[derive(Debug, Serialize, Deserialize)]
49pub struct SendVisibleMessageCardRequest {
50 pub open_ids: Vec<String>,
52 pub card: Value,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize)]
58pub struct SendVisibleMessageCardResponse {
59 pub message_id: String,
61}
62
63impl ApiResponseTrait for SendVisibleMessageCardResponse {
64 fn data_format() -> ResponseFormat {
65 ResponseFormat::Data
66 }
67}
68
69impl MessageCardService {
70 pub fn new(config: Config) -> Self {
71 Self { config }
72 }
73
74 pub async fn patch(
76 &self,
77 message_id: &str,
78 request: PatchMessageCardRequest,
79 option: Option<RequestOption>,
80 ) -> SDKResult<BaseResponse<EmptyResponse>> {
81 let api_req = ApiRequest {
82 http_method: Method::PATCH,
83 api_path: EndpointBuilder::replace_param(
84 crate::core::endpoints::im::IM_V1_UPDATE_MESSAGE,
85 "message_id",
86 message_id,
87 ),
88 supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
89 body: serde_json::to_vec(&request)?,
90 ..Default::default()
91 };
92
93 Transport::request(api_req, &self.config, option).await
94 }
95
96 pub async fn delay_update(
98 &self,
99 message_id: &str,
100 request: DelayUpdateMessageCardRequest,
101 option: Option<RequestOption>,
102 ) -> SDKResult<BaseResponse<EmptyResponse>> {
103 let api_req = ApiRequest {
104 http_method: Method::POST,
105 api_path: EndpointBuilder::replace_param(
106 crate::core::endpoints::im::IM_V1_MESSAGE_DELAY_UPDATE,
107 "message_id",
108 message_id,
109 ),
110 supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
111 body: serde_json::to_vec(&request)?,
112 ..Default::default()
113 };
114
115 Transport::request(api_req, &self.config, option).await
116 }
117
118 pub async fn send_visible(
120 &self,
121 message_id: &str,
122 request: SendVisibleMessageCardRequest,
123 option: Option<RequestOption>,
124 ) -> SDKResult<BaseResponse<SendVisibleMessageCardResponse>> {
125 let api_req = ApiRequest {
126 http_method: Method::POST,
127 api_path: EndpointBuilder::replace_param(
128 crate::core::endpoints::im::IM_V1_MESSAGE_URGENT_APP,
129 "message_id",
130 message_id,
131 ),
132 supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
133 body: serde_json::to_vec(&request)?,
134 ..Default::default()
135 };
136
137 Transport::request(api_req, &self.config, option).await
138 }
139
140 pub async fn delete_visible(
142 &self,
143 message_id: &str,
144 open_ids: Vec<String>,
145 option: Option<RequestOption>,
146 ) -> SDKResult<BaseResponse<EmptyResponse>> {
147 let request = serde_json::json!({
148 "open_ids": open_ids
149 });
150
151 let api_req = ApiRequest {
152 http_method: Method::DELETE,
153 api_path: EndpointBuilder::replace_param(
154 crate::core::endpoints::im::IM_V1_MESSAGE_URGENT_APP,
155 "message_id",
156 message_id,
157 ),
158 supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
159 body: serde_json::to_vec(&request)?,
160 ..Default::default()
161 };
162
163 Transport::request(api_req, &self.config, option).await
164 }
165}