use serde_derive::{Deserialize, Serialize};
use crate::config::{Client, Response};
use crate::ids::{BillingPortalSessionId, CustomerId};
use crate::params::{Expand, Expandable, Object, Timestamp};
use crate::resources::BillingPortalConfiguration;
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct BillingPortalSession {
pub id: BillingPortalSessionId,
pub configuration: Expandable<BillingPortalConfiguration>,
pub created: Timestamp,
pub customer: String,
pub livemode: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub locale: Option<Box<BillingPortalSessionLocale>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub on_behalf_of: Option<Box<String>>,
pub return_url: String,
pub url: String,
}
impl BillingPortalSession {
pub fn create(
client: &Client,
params: CreateBillingPortalSession<'_>,
) -> Response<BillingPortalSession> {
client.post_form("/billing_portal/sessions", ¶ms)
}
}
impl Object for BillingPortalSession {
type Id = BillingPortalSessionId;
fn id(&self) -> Self::Id {
self.id.clone()
}
fn object(&self) -> &'static str {
"billing_portal.session"
}
}
#[derive(Clone, Debug, Serialize)]
pub struct CreateBillingPortalSession<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
pub configuration: Option<&'a str>,
pub customer: CustomerId,
#[serde(skip_serializing_if = "Expand::is_empty")]
pub expand: &'a [&'a str],
#[serde(skip_serializing_if = "Option::is_none")]
pub locale: Option<BillingPortalSessionLocale>,
#[serde(skip_serializing_if = "Option::is_none")]
pub on_behalf_of: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")]
pub return_url: Option<&'a str>,
}
impl<'a> CreateBillingPortalSession<'a> {
pub fn new(customer: CustomerId) -> Self {
CreateBillingPortalSession {
configuration: Default::default(),
customer,
expand: Default::default(),
locale: Default::default(),
on_behalf_of: Default::default(),
return_url: Default::default(),
}
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum BillingPortalSessionLocale {
Auto,
Bg,
Cs,
Da,
De,
El,
En,
#[serde(rename = "en-AU")]
EnAu,
#[serde(rename = "en-CA")]
EnCa,
#[serde(rename = "en-GB")]
EnGb,
#[serde(rename = "en-IE")]
EnIe,
#[serde(rename = "en-IN")]
EnIn,
#[serde(rename = "en-NZ")]
EnNz,
#[serde(rename = "en-SG")]
EnSg,
Es,
#[serde(rename = "es-419")]
Es419,
Et,
Fi,
Fil,
Fr,
#[serde(rename = "fr-CA")]
FrCa,
Hr,
Hu,
Id,
It,
Ja,
Ko,
Lt,
Lv,
Ms,
Mt,
Nb,
Nl,
Pl,
Pt,
#[serde(rename = "pt-BR")]
PtBr,
Ro,
Ru,
Sk,
Sl,
Sv,
Th,
Tr,
Vi,
Zh,
#[serde(rename = "zh-HK")]
ZhHk,
#[serde(rename = "zh-TW")]
ZhTw,
}
impl BillingPortalSessionLocale {
pub fn as_str(self) -> &'static str {
match self {
BillingPortalSessionLocale::Auto => "auto",
BillingPortalSessionLocale::Bg => "bg",
BillingPortalSessionLocale::Cs => "cs",
BillingPortalSessionLocale::Da => "da",
BillingPortalSessionLocale::De => "de",
BillingPortalSessionLocale::El => "el",
BillingPortalSessionLocale::En => "en",
BillingPortalSessionLocale::EnAu => "en-AU",
BillingPortalSessionLocale::EnCa => "en-CA",
BillingPortalSessionLocale::EnGb => "en-GB",
BillingPortalSessionLocale::EnIe => "en-IE",
BillingPortalSessionLocale::EnIn => "en-IN",
BillingPortalSessionLocale::EnNz => "en-NZ",
BillingPortalSessionLocale::EnSg => "en-SG",
BillingPortalSessionLocale::Es => "es",
BillingPortalSessionLocale::Es419 => "es-419",
BillingPortalSessionLocale::Et => "et",
BillingPortalSessionLocale::Fi => "fi",
BillingPortalSessionLocale::Fil => "fil",
BillingPortalSessionLocale::Fr => "fr",
BillingPortalSessionLocale::FrCa => "fr-CA",
BillingPortalSessionLocale::Hr => "hr",
BillingPortalSessionLocale::Hu => "hu",
BillingPortalSessionLocale::Id => "id",
BillingPortalSessionLocale::It => "it",
BillingPortalSessionLocale::Ja => "ja",
BillingPortalSessionLocale::Ko => "ko",
BillingPortalSessionLocale::Lt => "lt",
BillingPortalSessionLocale::Lv => "lv",
BillingPortalSessionLocale::Ms => "ms",
BillingPortalSessionLocale::Mt => "mt",
BillingPortalSessionLocale::Nb => "nb",
BillingPortalSessionLocale::Nl => "nl",
BillingPortalSessionLocale::Pl => "pl",
BillingPortalSessionLocale::Pt => "pt",
BillingPortalSessionLocale::PtBr => "pt-BR",
BillingPortalSessionLocale::Ro => "ro",
BillingPortalSessionLocale::Ru => "ru",
BillingPortalSessionLocale::Sk => "sk",
BillingPortalSessionLocale::Sl => "sl",
BillingPortalSessionLocale::Sv => "sv",
BillingPortalSessionLocale::Th => "th",
BillingPortalSessionLocale::Tr => "tr",
BillingPortalSessionLocale::Vi => "vi",
BillingPortalSessionLocale::Zh => "zh",
BillingPortalSessionLocale::ZhHk => "zh-HK",
BillingPortalSessionLocale::ZhTw => "zh-TW",
}
}
}
impl AsRef<str> for BillingPortalSessionLocale {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for BillingPortalSessionLocale {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}