line_bot_messaging_api/api/
richmenu.rs

1use crate::{LineApiResponse, LineClient};
2use serde_derive::{Deserialize, Serialize};
3use serde_json::{json, Value};
4
5impl LineClient {
6    /// https://developers.line.biz/ja/reference/messaging-api/#create-rich-menu
7    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    /// https://developers.line.biz/ja/reference/messaging-api/#create-rich-menu
15    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    /// https://developers.line.biz/ja/reference/messaging-api/#delete-rich-menu
23    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    /// https://developers.line.biz/ja/reference/messaging-api/#download-rich-menu-image
39    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    /// https://developers.line.biz/ja/reference/messaging-api/#get-rich-menu-list
51    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    /// https://developers.line.biz/ja/reference/messaging-api/#delete-rich-menu
56    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    /// https://developers.line.biz/ja/reference/messaging-api/#delete-rich-menu
67    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    /// https://developers.line.biz/ja/reference/messaging-api/#get-default-rich-menu-id
78    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    /// https://developers.line.biz/ja/reference/messaging-api/#get-default-rich-menu-id
94    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    /// https://developers.line.biz/ja/reference/messaging-api/#cancel-default-rich-menu
101    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 {}