use crate::ids::CheckoutSessionId;
use crate::params::{Expandable, Object};
use crate::resources::{Currency, Customer, PaymentIntent, Plan, SetupIntent, Sku, Subscription};
use serde_derive::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct CheckoutSession {
pub id: CheckoutSessionId,
#[serde(skip_serializing_if = "Option::is_none")]
pub billing_address_collection: Option<String>,
pub cancel_url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub client_reference_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub customer: Option<Expandable<Customer>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub customer_email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_items: Option<Vec<CheckoutSessionDisplayItem>>,
pub livemode: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub locale: Option<CheckoutSessionLocale>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mode: Option<CheckoutSessionMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payment_intent: Option<Expandable<PaymentIntent>>,
pub payment_method_types: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub setup_intent: Option<Expandable<SetupIntent>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub submit_type: Option<CheckoutSessionSubmitType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub subscription: Option<Expandable<Subscription>>,
pub success_url: String,
}
impl Object for CheckoutSession {
type Id = CheckoutSessionId;
fn id(&self) -> Self::Id {
self.id.clone()
}
fn object(&self) -> &'static str {
"checkout.session"
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct CheckoutSessionDisplayItem {
#[serde(skip_serializing_if = "Option::is_none")]
pub amount: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub currency: Option<Currency>,
#[serde(skip_serializing_if = "Option::is_none")]
pub custom: Option<CheckoutSessionCustomDisplayItemDescription>,
#[serde(skip_serializing_if = "Option::is_none")]
pub plan: Option<Plan>,
#[serde(skip_serializing_if = "Option::is_none")]
pub quantity: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sku: Option<Sku>,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub type_: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct CheckoutSessionCustomDisplayItemDescription {
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub images: Option<Vec<String>>,
pub name: String,
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum CheckoutSessionLocale {
Auto,
Da,
De,
En,
Es,
Fi,
Fr,
It,
Ja,
Nb,
Nl,
Pl,
Pt,
Sv,
Zh,
}
impl CheckoutSessionLocale {
pub fn as_str(self) -> &'static str {
match self {
CheckoutSessionLocale::Auto => "auto",
CheckoutSessionLocale::Da => "da",
CheckoutSessionLocale::De => "de",
CheckoutSessionLocale::En => "en",
CheckoutSessionLocale::Es => "es",
CheckoutSessionLocale::Fi => "fi",
CheckoutSessionLocale::Fr => "fr",
CheckoutSessionLocale::It => "it",
CheckoutSessionLocale::Ja => "ja",
CheckoutSessionLocale::Nb => "nb",
CheckoutSessionLocale::Nl => "nl",
CheckoutSessionLocale::Pl => "pl",
CheckoutSessionLocale::Pt => "pt",
CheckoutSessionLocale::Sv => "sv",
CheckoutSessionLocale::Zh => "zh",
}
}
}
impl AsRef<str> for CheckoutSessionLocale {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for CheckoutSessionLocale {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum CheckoutSessionMode {
Payment,
Setup,
Subscription,
}
impl CheckoutSessionMode {
pub fn as_str(self) -> &'static str {
match self {
CheckoutSessionMode::Payment => "payment",
CheckoutSessionMode::Setup => "setup",
CheckoutSessionMode::Subscription => "subscription",
}
}
}
impl AsRef<str> for CheckoutSessionMode {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for CheckoutSessionMode {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum CheckoutSessionSubmitType {
Auto,
Book,
Donate,
Pay,
}
impl CheckoutSessionSubmitType {
pub fn as_str(self) -> &'static str {
match self {
CheckoutSessionSubmitType::Auto => "auto",
CheckoutSessionSubmitType::Book => "book",
CheckoutSessionSubmitType::Donate => "donate",
CheckoutSessionSubmitType::Pay => "pay",
}
}
}
impl AsRef<str> for CheckoutSessionSubmitType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for CheckoutSessionSubmitType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}