botx_api/api/models/
button.rs

1use serde::{Serialize, Deserialize};
2
3use super::{handler::Handler, align::Align};
4
5/// кнопки команд расположенные на клавиатуре, представленные в виде двумерного массива объектов.
6#[derive(Debug, Serialize, Deserialize, Default, Clone, Builder)]
7#[builder(setter(into, prefix = "with", strip_option))]
8pub struct Button {
9    /// тело команды (текст, который будет отправлен от пользователя и придёт в поле body)
10    pub command: String,
11
12    /// наименование команды (текст кнопки)
13    pub label: String,
14
15    /// (Default: {}) - объект с данными, которые будут отправлены в качестве параметров команды при нажатие на кнопку
16    #[serde(skip_serializing_if = "Option::is_none")]
17    #[builder(default)]
18    pub data: Option<serde_json::Value>,
19
20    /// объект с клиентскими опциями кнопки
21    #[builder(default)]
22    pub opts: ButtonOptions,
23}
24
25/// объект с клиентскими опциями кнопки
26#[derive(Debug, Serialize, Deserialize, Default, Clone, Builder)]
27#[builder(setter(into, prefix = "with", strip_option))]
28pub struct ButtonOptions {
29    /// (Default: false) - если значение true, то при нажатие на кнопку в чат не будет отправлено сообщение с текстом команды и сама команда отправится боту в фоне
30    #[serde(skip_serializing_if = "Option::is_none")]
31    #[builder(default)]
32    pub silent: Option<bool>,
33
34    /// (Default: 1) - размер кнопки по горизонтали
35    #[serde(skip_serializing_if = "Option::is_none")]
36    #[builder(default)]
37    pub h_size: Option<u32>,
38
39    /// (Default: false) - если значение true, то при нажатии на кнопку отобразится всплывающее уведомление с заданным в alert_text сообщением
40    #[serde(skip_serializing_if = "Option::is_none")]
41    #[builder(default)]
42    pub show_alert: Option<bool>,
43
44    /// (Default: null) - текст уведомления. Если значение null, то выведется тело команды
45    #[serde(skip_serializing_if = "Option::is_none")]
46    #[builder(default)]
47    pub alert_text: Option<String>,
48
49    /// (Default: “bot”) - если значение “client”, то при нажатии на кнопку команда не должна отправляться боту, а должна обрабатываться самим клиентом
50    #[serde(skip_serializing_if = "Option::is_none")]
51    #[builder(default)]
52    pub handler: Option<Handler>,
53    
54    /// (Default: null) - цвет текста в hex формате
55    #[serde(skip_serializing_if = "Option::is_none")]
56    #[builder(default)]
57    pub font_color: Option<String>, // TODO: HEX
58
59    /// (Default: null) - цвет фона/границ в hex формате
60    #[serde(skip_serializing_if = "Option::is_none")]
61    #[builder(default)]
62    pub background_color: Option<String>, //TODO: HEX
63
64    ///  (Default: “left”) - выравнивание текста left|center|right
65    #[serde(skip_serializing_if = "Option::is_none")]
66    #[builder(default)]
67    pub align: Option<Align>,
68}