line-bot-sdk-rust 3.0.0

LINE Messaging API SDK for Rust
Documentation
/*
* Copyright (C) 2016 LINE Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/*
 * Webhook Type Definition
 *
 * Webhook event definition of the LINE Messaging API
 *
 * The version of the OpenAPI document: 1.0.0
 *
 * Generated by: https://openapi-generator.tech
 */

use crate::line_webhook::models;
use serde::{Deserialize, Serialize};

/// Event : Webhook event
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum Event {
    #[serde(rename = "message")]
    MessageEvent(models::MessageEvent),
    #[serde(rename = "unsend")]
    UnsendEvent(models::UnsendEvent),
    #[serde(rename = "follow")]
    FollowEvent(models::FollowEvent),
    #[serde(rename = "unfollow")]
    UnfollowEvent(models::UnfollowEvent),
    #[serde(rename = "join")]
    JoinEvent(models::JoinEvent),
    #[serde(rename = "leave")]
    LeaveEvent(models::LeaveEvent),
    #[serde(rename = "memberJoined")]
    MemberJoinedEvent(models::MemberJoinedEvent),
    #[serde(rename = "memberLeft")]
    MemberLeftEvent(models::MemberLeftEvent),
    #[serde(rename = "postback")]
    PostbackEvent(models::PostbackEvent),
    #[serde(rename = "videoPlayComplete")]
    VideoPlayCompleteEvent(models::VideoPlayCompleteEvent),
    #[serde(rename = "beacon")]
    BeaconEvent(models::BeaconEvent),
    #[serde(rename = "accountLink")]
    AccountLinkEvent(models::AccountLinkEvent),
    #[serde(rename = "membership")]
    MembershipEvent(models::MembershipEvent),
    #[serde(rename = "module")]
    ModuleEvent(models::ModuleEvent),
    #[serde(rename = "activated")]
    ActivatedEvent(models::ActivatedEvent),
    #[serde(rename = "deactivated")]
    DeactivatedEvent(models::DeactivatedEvent),
    #[serde(rename = "botSuspended")]
    BotSuspendedEvent(models::BotSuspendedEvent),
    #[serde(rename = "botResumed")]
    BotResumedEvent(models::BotResumedEvent),
    #[serde(rename = "delivery")]
    PnpDeliveryCompletionEvent(models::PnpDeliveryCompletionEvent),
    #[serde(other)]
    UnknownEvent,
}

impl Default for Event {
    fn default() -> Event {
        Event::MessageEvent(Default::default())
    }
}

pub trait EventExt {
    fn source(&self) -> &Option<Box<models::Source>>;
    fn timestamp(&self) -> &i64;
    fn mode(&self) -> &models::EventMode;
    fn webhook_event_id(&self) -> &String;
    fn delivery_context(&self) -> &models::DeliveryContext;
}

impl EventExt for Event {
    fn source(&self) -> &Option<Box<models::Source>> {
        match self {
            Event::MessageEvent(v) => &v.source,
            Event::UnsendEvent(v) => &v.source,
            Event::FollowEvent(v) => &v.source,
            Event::UnfollowEvent(v) => &v.source,
            Event::JoinEvent(v) => &v.source,
            Event::LeaveEvent(v) => &v.source,
            Event::MemberJoinedEvent(v) => &v.source,
            Event::MemberLeftEvent(v) => &v.source,
            Event::PostbackEvent(v) => &v.source,
            Event::VideoPlayCompleteEvent(v) => &v.source,
            Event::BeaconEvent(v) => &v.source,
            Event::AccountLinkEvent(v) => &v.source,
            Event::MembershipEvent(v) => &v.source,
            Event::ModuleEvent(v) => &v.source,
            Event::ActivatedEvent(v) => &v.source,
            Event::DeactivatedEvent(v) => &v.source,
            Event::BotSuspendedEvent(v) => &v.source,
            Event::BotResumedEvent(v) => &v.source,
            Event::PnpDeliveryCompletionEvent(v) => &v.source,
            _ => panic!("Cannot access source on UnknownEvent"),
        }
    }
    fn timestamp(&self) -> &i64 {
        match self {
            Event::MessageEvent(v) => &v.timestamp,
            Event::UnsendEvent(v) => &v.timestamp,
            Event::FollowEvent(v) => &v.timestamp,
            Event::UnfollowEvent(v) => &v.timestamp,
            Event::JoinEvent(v) => &v.timestamp,
            Event::LeaveEvent(v) => &v.timestamp,
            Event::MemberJoinedEvent(v) => &v.timestamp,
            Event::MemberLeftEvent(v) => &v.timestamp,
            Event::PostbackEvent(v) => &v.timestamp,
            Event::VideoPlayCompleteEvent(v) => &v.timestamp,
            Event::BeaconEvent(v) => &v.timestamp,
            Event::AccountLinkEvent(v) => &v.timestamp,
            Event::MembershipEvent(v) => &v.timestamp,
            Event::ModuleEvent(v) => &v.timestamp,
            Event::ActivatedEvent(v) => &v.timestamp,
            Event::DeactivatedEvent(v) => &v.timestamp,
            Event::BotSuspendedEvent(v) => &v.timestamp,
            Event::BotResumedEvent(v) => &v.timestamp,
            Event::PnpDeliveryCompletionEvent(v) => &v.timestamp,
            _ => panic!("Cannot access timestamp on UnknownEvent"),
        }
    }
    fn mode(&self) -> &models::EventMode {
        match self {
            Event::MessageEvent(v) => &v.mode,
            Event::UnsendEvent(v) => &v.mode,
            Event::FollowEvent(v) => &v.mode,
            Event::UnfollowEvent(v) => &v.mode,
            Event::JoinEvent(v) => &v.mode,
            Event::LeaveEvent(v) => &v.mode,
            Event::MemberJoinedEvent(v) => &v.mode,
            Event::MemberLeftEvent(v) => &v.mode,
            Event::PostbackEvent(v) => &v.mode,
            Event::VideoPlayCompleteEvent(v) => &v.mode,
            Event::BeaconEvent(v) => &v.mode,
            Event::AccountLinkEvent(v) => &v.mode,
            Event::MembershipEvent(v) => &v.mode,
            Event::ModuleEvent(v) => &v.mode,
            Event::ActivatedEvent(v) => &v.mode,
            Event::DeactivatedEvent(v) => &v.mode,
            Event::BotSuspendedEvent(v) => &v.mode,
            Event::BotResumedEvent(v) => &v.mode,
            Event::PnpDeliveryCompletionEvent(v) => &v.mode,
            _ => panic!("Cannot access mode on UnknownEvent"),
        }
    }
    fn webhook_event_id(&self) -> &String {
        match self {
            Event::MessageEvent(v) => &v.webhook_event_id,
            Event::UnsendEvent(v) => &v.webhook_event_id,
            Event::FollowEvent(v) => &v.webhook_event_id,
            Event::UnfollowEvent(v) => &v.webhook_event_id,
            Event::JoinEvent(v) => &v.webhook_event_id,
            Event::LeaveEvent(v) => &v.webhook_event_id,
            Event::MemberJoinedEvent(v) => &v.webhook_event_id,
            Event::MemberLeftEvent(v) => &v.webhook_event_id,
            Event::PostbackEvent(v) => &v.webhook_event_id,
            Event::VideoPlayCompleteEvent(v) => &v.webhook_event_id,
            Event::BeaconEvent(v) => &v.webhook_event_id,
            Event::AccountLinkEvent(v) => &v.webhook_event_id,
            Event::MembershipEvent(v) => &v.webhook_event_id,
            Event::ModuleEvent(v) => &v.webhook_event_id,
            Event::ActivatedEvent(v) => &v.webhook_event_id,
            Event::DeactivatedEvent(v) => &v.webhook_event_id,
            Event::BotSuspendedEvent(v) => &v.webhook_event_id,
            Event::BotResumedEvent(v) => &v.webhook_event_id,
            Event::PnpDeliveryCompletionEvent(v) => &v.webhook_event_id,
            _ => panic!("Cannot access webhook_event_id on UnknownEvent"),
        }
    }
    fn delivery_context(&self) -> &models::DeliveryContext {
        match self {
            Event::MessageEvent(v) => &v.delivery_context,
            Event::UnsendEvent(v) => &v.delivery_context,
            Event::FollowEvent(v) => &v.delivery_context,
            Event::UnfollowEvent(v) => &v.delivery_context,
            Event::JoinEvent(v) => &v.delivery_context,
            Event::LeaveEvent(v) => &v.delivery_context,
            Event::MemberJoinedEvent(v) => &v.delivery_context,
            Event::MemberLeftEvent(v) => &v.delivery_context,
            Event::PostbackEvent(v) => &v.delivery_context,
            Event::VideoPlayCompleteEvent(v) => &v.delivery_context,
            Event::BeaconEvent(v) => &v.delivery_context,
            Event::AccountLinkEvent(v) => &v.delivery_context,
            Event::MembershipEvent(v) => &v.delivery_context,
            Event::ModuleEvent(v) => &v.delivery_context,
            Event::ActivatedEvent(v) => &v.delivery_context,
            Event::DeactivatedEvent(v) => &v.delivery_context,
            Event::BotSuspendedEvent(v) => &v.delivery_context,
            Event::BotResumedEvent(v) => &v.delivery_context,
            Event::PnpDeliveryCompletionEvent(v) => &v.delivery_context,
            _ => panic!("Cannot access delivery_context on UnknownEvent"),
        }
    }
}