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
69
70
71
72
73
74
75
76
77
use crate::objects::Action;

use serde_derive::Serialize;

#[derive(Serialize, Debug)]
pub struct TemplateMessage {
    #[serde(rename = "altText")]
    pub alt_text: String,
    pub template: Template,
}

#[derive(Serialize, Debug)]
pub struct Template {
    #[serde(flatten)]
    pub r#type: TemplateType,
}

#[derive(Serialize, Debug)]
#[serde(tag = "type")]
pub enum TemplateType {
    #[serde(rename = "buttons")]
    Buttons {
        #[serde(rename = "thumbnailImageUrl", skip_serializing_if = "Option::is_none")]
        thumbnail_image_url: Option<String>,
        #[serde(rename = "imageAspectRatio", skip_serializing_if = "Option::is_none")]
        image_aspect_ratio: Option<String>,
        #[serde(rename = "imageSize", skip_serializing_if = "Option::is_none")]
        image_size: Option<String>,
        #[serde(
            rename = "imageBackgroundColor",
            skip_serializing_if = "Option::is_none"
        )]
        image_background_color: Option<String>,
        #[serde(skip_serializing_if = "Option::is_none")]
        title: Option<String>,
        text: String,
        #[serde(rename = "defaultAction", skip_serializing_if = "Option::is_none")]
        default_action: Option<Action>,
        actions: Vec<Action>,
    },
    #[serde(rename = "confirm")]
    Confirm { text: String, actions: Vec<Action> },
    #[serde(rename = "carousel")]
    Carousel {
        columns: Vec<Column>,
        #[serde(rename = "imageAspectRatio", skip_serializing_if = "Option::is_none")]
        image_aspect_ratio: Option<String>,
        #[serde(rename = "imageSize", skip_serializing_if = "Option::is_none")]
        image_size: Option<String>,
    },
    #[serde(rename = "image_carousel")]
    ImageCarousel { columns: Vec<ImageColumn> },
}

#[derive(Serialize, Debug)]
pub struct Column {
    #[serde(rename = "thumbnailImageUrl", skip_serializing_if = "Option::is_none")]
    pub thumbnail_image_url: Option<String>,
    #[serde(
        rename = "imageBackgroundColor",
        skip_serializing_if = "Option::is_none"
    )]
    pub image_background_color: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub title: Option<String>,
    pub text: String,
    #[serde(rename = "defaultAction", skip_serializing_if = "Option::is_none")]
    pub default_action: Option<Action>,
    pub actions: Vec<Action>,
}

#[derive(Serialize, Debug)]
pub struct ImageColumn {
    #[serde(rename = "imageUrl")]
    pub image_url: String,
    pub action: Action,
}