1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
use serde::{Serialize, Deserialize};

use super::{handler::Handler, align::Align};


/// кнопки команд расположенные под сообщением, представленные в виде двумерного массива объектов.
#[derive(Debug, Serialize, Deserialize, Default, Clone, Builder)]
#[builder(setter(into, prefix = "with", strip_option))]
pub struct Bubble {
    /// тело команды
    pub command: String,

    /// наименование команды
    pub label: String,

    /// (Default: {}) - объект с данными, которые будут отправлены в качестве параметров команды при нажатие на кнопку
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default)]
    pub data: Option<serde_json::Value>,

    /// объект с клиентскими опциями кнопки
    #[builder(default)]
    pub opts: BubbleOptions
}

#[derive(Debug, Serialize, Deserialize, Default, Clone, Builder)]
#[builder(setter(into, prefix = "with", strip_option))]
pub struct BubbleOptions {
    /// (Default: 1) - если значение true, то при нажатие на кнопку в чат не будет отправлено сообщение с текстом команды и сама команда отправится боту в фоне
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default)]
    pub silent: Option<bool>,

    /// (Default: 1) - размер кнопки по горизонтали
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default)]
    pub h_size: Option<u32>,

    /// (Default: false) - если значение true, то при нажатии на кнопку отобразится всплывающее уведомление с заданным в alert_text сообщением
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default)]
    pub show_alert: Option<bool>,

    /// (Default: null) - текст уведомления. Если значение null, то выведется тело команды
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default)]
    pub alert_text: Option<String>,

    /// (Default: “bot”) - если значение “client”, то при нажатии на кнопку команда не должна отправляться боту, а должна обрабатываться самим клиентом
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default)]
    pub handler: Option<Handler>,

    /// (Default: null) - цвет текста в hex формате
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default)]
    pub font_color: Option<String>,

    /// (Default: null) - цвет фона/границ в hex формате
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default)]
    pub background_color: Option<String>,

    /// (Default: “left”) - выравнивание текста left|center|right
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default)]
    pub align: Option<Align>
}