use crate::models;
use serde::{Deserialize, Serialize};
use super::{
AccountLinkEvent, ActivatedEvent, BeaconEvent, BotResumedEvent, BotSuspendedEvent,
DeactivatedEvent, FollowEvent, JoinEvent, LeaveEvent, LinkContent, MemberJoinedEvent,
MemberLeftEvent, MembershipEvent, MessageEvent, ModuleEvent, PnpDeliveryCompletionEvent,
PostbackEvent, ThingsEvent, UnfollowEvent, UnsendEvent, VideoPlayCompleteEvent,
};
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum Event {
#[serde(rename = "accountLink")]
AccountLinkEvent(AccountLinkEvent),
#[serde(rename = "activated")]
ActivatedEvent(ActivatedEvent),
#[serde(rename = "beacon")]
BeaconEvent(BeaconEvent),
#[serde(rename = "botResumed")]
BotResumedEvent(BotResumedEvent),
#[serde(rename = "botSuspended")]
BotSuspendedEvent(BotSuspendedEvent),
#[serde(rename = "deactivated")]
DeactivatedEvent(DeactivatedEvent),
#[serde(rename = "delivery")]
PnpDeliveryCompletionEvent(PnpDeliveryCompletionEvent),
#[serde(rename = "follow")]
FollowEvent(FollowEvent),
#[serde(rename = "join")]
JoinEvent(JoinEvent),
#[serde(rename = "leave")]
LeaveEvent(LeaveEvent),
#[serde(rename = "memberJoined")]
MemberJoinedEvent(MemberJoinedEvent),
#[serde(rename = "memberLeft")]
MemberLeftEvent(MemberLeftEvent),
#[serde(rename = "membership")]
MembershipEvent(MembershipEvent),
#[serde(rename = "message")]
MessageEvent(MessageEvent),
#[serde(rename = "module")]
ModuleEvent(ModuleEvent),
#[serde(rename = "postback")]
PostbackEvent(PostbackEvent),
#[serde(rename = "things")]
ThingsEvent(ThingsEvent),
#[serde(rename = "unfollow")]
UnfollowEvent(UnfollowEvent),
#[serde(rename = "unsend")]
UnsendEvent(UnsendEvent),
#[serde(rename = "videoPlayComplete")]
VideoPlayCompleteEvent(VideoPlayCompleteEvent),
}
impl Default for Event {
fn default() -> Self {
Self::AccountLinkEvent(AccountLinkEvent {
r#type: Some("accountLink".to_owned()),
source: None,
timestamp: Default::default(),
mode: Default::default(),
webhook_event_id: Default::default(),
delivery_context: Default::default(),
reply_token: None,
link: Box::new(LinkContent {
result: Default::default(),
nonce: "".to_owned(),
}),
})
}
}