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, }