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.
*/

/*
 * LINE Messaging API
 *
 * This document describes LINE Messaging API.
 *
 * The version of the OpenAPI document: 0.0.1
 *
 * Generated by: https://openapi-generator.tech
 */

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

/// Action : Action
#[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"),
        }
    }
}