use crate::line_messaging_api::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct CouponCreateRequest {
#[serde(rename = "acquisitionCondition")]
pub acquisition_condition: Box<models::AcquisitionConditionRequest>,
#[serde(rename = "barcodeImageUrl", skip_serializing_if = "Option::is_none")]
pub barcode_image_url: Option<String>,
#[serde(rename = "couponCode", skip_serializing_if = "Option::is_none")]
pub coupon_code: Option<String>,
#[serde(rename = "description", skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(rename = "endTimestamp")]
pub end_timestamp: i64,
#[serde(rename = "imageUrl", skip_serializing_if = "Option::is_none")]
pub image_url: Option<String>,
#[serde(rename = "maxUseCountPerTicket")]
pub max_use_count_per_ticket: i32,
#[serde(rename = "startTimestamp")]
pub start_timestamp: i64,
#[serde(rename = "title")]
pub title: String,
#[serde(rename = "usageCondition", skip_serializing_if = "Option::is_none")]
pub usage_condition: Option<String>,
#[serde(rename = "reward", skip_serializing_if = "Option::is_none")]
pub reward: Option<Box<models::CouponRewardRequest>>,
#[serde(rename = "visibility")]
pub visibility: Visibility,
#[serde(rename = "timezone")]
pub timezone: Timezone,
}
impl CouponCreateRequest {
pub fn new(
acquisition_condition: models::AcquisitionConditionRequest,
end_timestamp: i64,
max_use_count_per_ticket: i32,
start_timestamp: i64,
title: String,
visibility: Visibility,
timezone: Timezone,
) -> CouponCreateRequest {
CouponCreateRequest {
acquisition_condition: Box::new(acquisition_condition),
barcode_image_url: None,
coupon_code: None,
description: None,
end_timestamp,
image_url: None,
max_use_count_per_ticket,
start_timestamp,
title,
usage_condition: None,
reward: None,
visibility,
timezone,
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
#[allow(non_camel_case_types)]
pub enum Visibility {
#[serde(rename = "UNLISTED")]
Unlisted,
#[serde(rename = "PUBLIC")]
Public,
}
impl Default for Visibility {
fn default() -> Visibility {
Self::Unlisted
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
#[allow(non_camel_case_types)]
pub enum Timezone {
#[serde(rename = "ETC_GMT_MINUS_12")]
EtcGmtMinus12,
#[serde(rename = "ETC_GMT_MINUS_11")]
EtcGmtMinus11,
#[serde(rename = "PACIFIC_HONOLULU")]
PacificHonolulu,
#[serde(rename = "AMERICA_ANCHORAGE")]
AmericaAnchorage,
#[serde(rename = "AMERICA_LOS_ANGELES")]
AmericaLosAngeles,
#[serde(rename = "AMERICA_PHOENIX")]
AmericaPhoenix,
#[serde(rename = "AMERICA_CHICAGO")]
AmericaChicago,
#[serde(rename = "AMERICA_NEW_YORK")]
AmericaNewYork,
#[serde(rename = "AMERICA_CARACAS")]
AmericaCaracas,
#[serde(rename = "AMERICA_SANTIAGO")]
AmericaSantiago,
#[serde(rename = "AMERICA_ST_JOHNS")]
AmericaStJohns,
#[serde(rename = "AMERICA_SAO_PAULO")]
AmericaSaoPaulo,
#[serde(rename = "ETC_GMT_MINUS_2")]
EtcGmtMinus2,
#[serde(rename = "ATLANTIC_CAPE_VERDE")]
AtlanticCapeVerde,
#[serde(rename = "EUROPE_LONDON")]
EuropeLondon,
#[serde(rename = "EUROPE_PARIS")]
EuropeParis,
#[serde(rename = "EUROPE_ISTANBUL")]
EuropeIstanbul,
#[serde(rename = "EUROPE_MOSCOW")]
EuropeMoscow,
#[serde(rename = "ASIA_TEHRAN")]
AsiaTehran,
#[serde(rename = "ASIA_TBILISI")]
AsiaTbilisi,
#[serde(rename = "ASIA_KABUL")]
AsiaKabul,
#[serde(rename = "ASIA_TASHKENT")]
AsiaTashkent,
#[serde(rename = "ASIA_COLOMBO")]
AsiaColombo,
#[serde(rename = "ASIA_KATHMANDU")]
AsiaKathmandu,
#[serde(rename = "ASIA_ALMATY")]
AsiaAlmaty,
#[serde(rename = "ASIA_RANGOON")]
AsiaRangoon,
#[serde(rename = "ASIA_BANGKOK")]
AsiaBangkok,
#[serde(rename = "ASIA_TAIPEI")]
AsiaTaipei,
#[serde(rename = "ASIA_TOKYO")]
AsiaTokyo,
#[serde(rename = "AUSTRALIA_DARWIN")]
AustraliaDarwin,
#[serde(rename = "AUSTRALIA_SYDNEY")]
AustraliaSydney,
#[serde(rename = "ASIA_VLADIVOSTOK")]
AsiaVladivostok,
#[serde(rename = "ETC_GMT_PLUS_12")]
EtcGmtPlus12,
#[serde(rename = "PACIFIC_TONGATAPU")]
PacificTongatapu,
}
impl Default for Timezone {
fn default() -> Timezone {
Self::EtcGmtMinus12
}
}