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
use serde_derive::Serialize;

#[derive(Serialize, Debug)]
pub struct ImagemapMessage {
    #[serde(rename = "baseUrl")]
    pub base_url: String,
    #[serde(rename = "altText")]
    pub alt_text: String,
    #[serde(rename = "baseSize")]
    pub base_size: BaseSize,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub video: Option<Video>,
    pub actions: Vec<Actions>,
}

#[derive(Serialize, Debug)]
pub struct BaseSize {
    pub height: i64,
    pub width: i64,
}

#[derive(Serialize, Debug)]
pub struct Video {
    #[serde(rename = "originalContentUrl")]
    pub original_content_url: String,
    #[serde(rename = "previewImageUrl")]
    pub preview_image_url: String,
    pub area: Area,
    #[serde(rename = "externalLink")]
    pub external_link: ExternalLink,
}

#[derive(Serialize, Debug)]
pub struct Area {
    pub x: i64,
    pub y: i64,
    pub height: i64,
    pub width: i64,
}

#[derive(Serialize, Debug)]
pub struct ExternalLink {
    #[serde(rename = "linkUri")]
    pub link_uri: String,
    pub label: String,
}

#[derive(Serialize, Debug)]
pub struct Actions {
    #[serde(flatten)]
    r#type: ActionsType,
    #[serde(default)]
    label: String,
    area: Area,
}

#[derive(Serialize, Debug)]
pub enum ActionsType {
    Uri {
        #[serde(rename = "linkUri")]
        link_uri: String,
    },
    Message {
        text: String,
    },
}