use crate::line_messaging_api::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum Action {
#[serde(rename = "camera")]
CameraAction(models::CameraAction),
#[serde(rename = "cameraRoll")]
CameraRollAction(models::CameraRollAction),
#[serde(rename = "clipboard")]
ClipboardAction(models::ClipboardAction),
#[serde(rename = "datetimepicker")]
DatetimePickerAction(models::DatetimePickerAction),
#[serde(rename = "location")]
LocationAction(models::LocationAction),
#[serde(rename = "message")]
MessageAction(models::MessageAction),
#[serde(rename = "postback")]
PostbackAction(models::PostbackAction),
#[serde(rename = "richmenuswitch")]
RichMenuSwitchAction(models::RichMenuSwitchAction),
#[serde(rename = "uri")]
UriAction(models::UriAction),
#[serde(other)]
UnknownAction,
}
impl Default for Action {
fn default() -> Action {
Action::CameraAction(Default::default())
}
}
pub trait ActionExt {
fn label(&self) -> &Option<String>;
}
impl ActionExt for Action {
fn label(&self) -> &Option<String> {
match self {
Action::CameraAction(v) => &v.label,
Action::CameraRollAction(v) => &v.label,
Action::ClipboardAction(v) => &v.label,
Action::DatetimePickerAction(v) => &v.label,
Action::LocationAction(v) => &v.label,
Action::MessageAction(v) => &v.label,
Action::PostbackAction(v) => &v.label,
Action::RichMenuSwitchAction(v) => &v.label,
Action::UriAction(v) => &v.label,
_ => panic!("Cannot access label on UnknownAction"),
}
}
}