use crate::line_webhook::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum MessageContent {
#[serde(rename = "text")]
TextMessageContent(models::TextMessageContent),
#[serde(rename = "image")]
ImageMessageContent(models::ImageMessageContent),
#[serde(rename = "video")]
VideoMessageContent(models::VideoMessageContent),
#[serde(rename = "audio")]
AudioMessageContent(models::AudioMessageContent),
#[serde(rename = "file")]
FileMessageContent(models::FileMessageContent),
#[serde(rename = "location")]
LocationMessageContent(models::LocationMessageContent),
#[serde(rename = "sticker")]
StickerMessageContent(models::StickerMessageContent),
#[serde(other)]
UnknownMessageContent,
}
impl Default for MessageContent {
fn default() -> MessageContent {
MessageContent::TextMessageContent(Default::default())
}
}
pub trait MessageContentExt {
fn id(&self) -> &String;
}
impl MessageContentExt for MessageContent {
fn id(&self) -> &String {
match self {
MessageContent::TextMessageContent(v) => &v.id,
MessageContent::ImageMessageContent(v) => &v.id,
MessageContent::VideoMessageContent(v) => &v.id,
MessageContent::AudioMessageContent(v) => &v.id,
MessageContent::FileMessageContent(v) => &v.id,
MessageContent::LocationMessageContent(v) => &v.id,
MessageContent::StickerMessageContent(v) => &v.id,
_ => panic!("Cannot access id on UnknownMessageContent"),
}
}
}