line_bot_messaging_api/api/
richmenu.rs1use crate::{LineApiResponse, LineClient};
2use serde_derive::{Deserialize, Serialize};
3use serde_json::{json, Value};
4
5impl LineClient {
6 pub async fn rich_menu_create(
8 &self,
9 value: Value,
10 ) -> LineApiResponse<LineApiRichMenuCreateResponse> {
11 self.http_post("https://api.line.me/v2/bot/richmenu", &value)
12 .await
13 }
14 pub async fn rich_menu_validate_object(
16 &self,
17 value: Value,
18 ) -> LineApiResponse<LineApiRichMenuValidateObjectResponse> {
19 self.http_post("https://api.line.me/v2/bot/richmenu/validate", &value)
20 .await
21 }
22 pub async fn rich_menu_content_upload(
24 &self,
25 rich_menu_id: &str,
26 file: Vec<u8>,
27 ) -> LineApiResponse<Value> {
28 self.http_post_data(
29 format!(
30 "https://api-data.line.me/v2/bot/richmenu/{}/content",
31 rich_menu_id
32 )
33 .as_str(),
34 file,
35 )
36 .await
37 }
38 pub async fn rich_menu_content_download(&self, rich_menu_id: &str) -> LineApiResponse<Vec<u8>> {
40 self.http_get_stream(
41 format!(
42 "https://api-data.line.me/v2/bot/richmenu/{}/content",
43 rich_menu_id
44 )
45 .as_str(),
46 &json!({}),
47 )
48 .await
49 }
50 pub async fn rich_menu_list(&self) -> LineApiResponse<LineApiRichMenuListResponse> {
52 self.http_get("https://api.line.me/v2/bot/richmenu/list", &json!({}))
53 .await
54 }
55 pub async fn rich_menu_delete(
57 &self,
58 rich_menu_id: &str,
59 ) -> LineApiResponse<LineApiRichMenuDeleteResponse> {
60 self.http_delete(
61 format!("https://api.line.me/v2/bot/richmenu/{}", rich_menu_id).as_str(),
62 &json!({}),
63 )
64 .await
65 }
66 pub async fn rich_menu_get(
68 &self,
69 rich_menu_id: &str,
70 ) -> LineApiResponse<LineApiRichMenuGetResponse> {
71 self.http_get(
72 format!("https://api.line.me/v2/bot/richmenu/{}", rich_menu_id).as_str(),
73 &json!({}),
74 )
75 .await
76 }
77 pub async fn rich_menu_set_default_menu(
79 &self,
80 rich_menu_id: &str,
81 ) -> LineApiResponse<LineApiRichMenuSetDefaultResponse> {
82 self.http_post(
83 format!(
84 "https://api.line.me/v2/bot/user/all/richmenu/{}",
85 rich_menu_id
86 )
87 .as_str(),
88 &json!({}),
89 )
90 .await
91 }
92
93 pub async fn rich_menu_get_default_menu_id(
95 &self,
96 ) -> LineApiResponse<LineApiRichMenuGetDefaultResponse> {
97 self.http_get("https://api.line.me/v2/bot/user/all/richmenu", &json!({}))
98 .await
99 }
100 pub async fn rich_menu_delete_default_menu(
102 &self,
103 ) -> LineApiResponse<LineApiRichMenuDeleteDefaultResponse> {
104 self.http_delete("https://api.line.me/v2/bot/user/all/richmenu", &json!({}))
105 .await
106 }
107}
108
109#[derive(Debug, Default, Deserialize, Serialize, Clone)]
110pub struct LineApiRichMenuCreateResponse {
111 #[serde(rename = "richMenuId")]
112 pub rich_menu_id: String,
113}
114
115#[derive(Debug, Default, Deserialize, Serialize, Clone)]
116pub struct LineApiRichMenuValidateObjectResponse {}
117
118#[derive(Debug, Default, Clone, Deserialize, Serialize)]
119pub struct SlackApiFilesUploadRequest {
120 pub file: Option<String>,
121}
122
123#[derive(Debug, Default, Deserialize, Serialize, Clone)]
124pub struct LineApiRichMenuListResponse {
125 #[serde(rename = "richmenus")]
126 pub rich_menus: Vec<RichMenu>,
127}
128
129#[derive(Debug, Default, Deserialize, Serialize, Clone)]
130pub struct RichMenu {
131 #[serde(rename = "richMenuId")]
132 pub rich_menu_id: String,
133 #[serde(rename = "name")]
134 pub name: String,
135 #[serde(rename = "size")]
136 pub size: RichMenuSize,
137 #[serde(rename = "chatBarText")]
138 pub chat_bar_text: String,
139 #[serde(rename = "selected")]
140 pub selected: bool,
141 #[serde(rename = "areas")]
142 pub areas: Vec<RichMenuArea>,
143}
144
145#[derive(Debug, Default, Deserialize, Serialize, Clone)]
146pub struct RichMenuSize {
147 pub width: u32,
148 pub height: u32,
149}
150
151#[derive(Debug, Default, Deserialize, Serialize, Clone)]
152pub struct RichMenuArea {
153 pub bounds: RichMenuAreaBounds,
154 pub action: RichMenuAction,
155}
156
157#[derive(Debug, Default, Deserialize, Serialize, Clone)]
158pub struct RichMenuAreaBounds {
159 pub x: u32,
160 pub y: u32,
161 pub width: u32,
162 pub height: u32,
163}
164
165#[derive(Debug, Default, Deserialize, Serialize, Clone)]
166pub struct RichMenuAction {
167 #[serde(rename = "type")]
168 pub action_type: String,
169 pub data: Option<String>,
170}
171
172#[derive(Debug, Default, Deserialize, Serialize, Clone)]
173pub struct LineApiRichMenuGetResponse {
174 #[serde(flatten)]
175 pub rich_menu: RichMenu,
176}
177#[derive(Debug, Default, Deserialize, Serialize, Clone)]
178pub struct LineApiRichMenuDeleteResponse {}
179
180#[derive(Debug, Default, Deserialize, Serialize, Clone)]
181pub struct LineApiRichMenuSetDefaultResponse {}
182
183#[derive(Debug, Default, Deserialize, Serialize, Clone)]
184pub struct LineApiRichMenuGetDefaultResponse {
185 #[serde(rename = "richMenuId")]
186 pub rich_menu_id: String,
187}
188
189#[derive(Debug, Default, Deserialize, Serialize, Clone)]
190pub struct LineApiRichMenuDeleteDefaultResponse {}