use serde::{Deserialize, Serialize};
use crate::ids::BillingPortalConfigurationId;
use crate::params::{Expandable, Metadata, Object, Timestamp};
use crate::resources::Application;
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct BillingPortalConfiguration {
pub id: BillingPortalConfigurationId,
pub active: bool,
pub application: Option<Expandable<Application>>,
pub business_profile: PortalBusinessProfile,
pub created: Timestamp,
pub default_return_url: Option<String>,
pub features: PortalFeatures,
pub is_default: bool,
pub livemode: bool,
pub login_page: PortalLoginPage,
pub metadata: Option<Metadata>,
pub updated: Timestamp,
}
impl Object for BillingPortalConfiguration {
type Id = BillingPortalConfigurationId;
fn id(&self) -> Self::Id {
self.id.clone()
}
fn object(&self) -> &'static str {
"billing_portal.configuration"
}
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct PortalBusinessProfile {
pub headline: Option<String>,
pub privacy_policy_url: Option<String>,
pub terms_of_service_url: Option<String>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct PortalFeatures {
pub customer_update: PortalCustomerUpdate,
pub invoice_history: PortalInvoiceList,
pub payment_method_update: PortalPaymentMethodUpdate,
pub subscription_cancel: PortalSubscriptionCancel,
pub subscription_pause: PortalSubscriptionPause,
pub subscription_update: PortalSubscriptionUpdate,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct PortalCustomerUpdate {
pub allowed_updates: Vec<PortalCustomerUpdateAllowedUpdates>,
pub enabled: bool,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct PortalInvoiceList {
pub enabled: bool,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct PortalLoginPage {
pub enabled: bool,
pub url: Option<String>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct PortalPaymentMethodUpdate {
pub enabled: bool,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct PortalSubscriptionCancel {
pub cancellation_reason: PortalSubscriptionCancellationReason,
pub enabled: bool,
pub mode: PortalSubscriptionCancelMode,
pub proration_behavior: PortalSubscriptionCancelProrationBehavior,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct PortalSubscriptionCancellationReason {
pub enabled: bool,
pub options: Vec<PortalSubscriptionCancellationReasonOptions>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct PortalSubscriptionPause {
pub enabled: bool,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct PortalSubscriptionUpdate {
pub default_allowed_updates: Vec<PortalSubscriptionUpdateDefaultAllowedUpdates>,
pub enabled: bool,
pub products: Option<Vec<PortalSubscriptionUpdateProduct>>,
pub proration_behavior: PortalSubscriptionUpdateProrationBehavior,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct PortalSubscriptionUpdateProduct {
pub prices: Vec<String>,
pub product: String,
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum PortalCustomerUpdateAllowedUpdates {
Address,
Email,
Name,
Phone,
Shipping,
TaxId,
}
impl PortalCustomerUpdateAllowedUpdates {
pub fn as_str(self) -> &'static str {
match self {
PortalCustomerUpdateAllowedUpdates::Address => "address",
PortalCustomerUpdateAllowedUpdates::Email => "email",
PortalCustomerUpdateAllowedUpdates::Name => "name",
PortalCustomerUpdateAllowedUpdates::Phone => "phone",
PortalCustomerUpdateAllowedUpdates::Shipping => "shipping",
PortalCustomerUpdateAllowedUpdates::TaxId => "tax_id",
}
}
}
impl AsRef<str> for PortalCustomerUpdateAllowedUpdates {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for PortalCustomerUpdateAllowedUpdates {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for PortalCustomerUpdateAllowedUpdates {
fn default() -> Self {
Self::Address
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum PortalSubscriptionCancelMode {
AtPeriodEnd,
Immediately,
}
impl PortalSubscriptionCancelMode {
pub fn as_str(self) -> &'static str {
match self {
PortalSubscriptionCancelMode::AtPeriodEnd => "at_period_end",
PortalSubscriptionCancelMode::Immediately => "immediately",
}
}
}
impl AsRef<str> for PortalSubscriptionCancelMode {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for PortalSubscriptionCancelMode {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for PortalSubscriptionCancelMode {
fn default() -> Self {
Self::AtPeriodEnd
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum PortalSubscriptionCancelProrationBehavior {
AlwaysInvoice,
CreateProrations,
None,
}
impl PortalSubscriptionCancelProrationBehavior {
pub fn as_str(self) -> &'static str {
match self {
PortalSubscriptionCancelProrationBehavior::AlwaysInvoice => "always_invoice",
PortalSubscriptionCancelProrationBehavior::CreateProrations => "create_prorations",
PortalSubscriptionCancelProrationBehavior::None => "none",
}
}
}
impl AsRef<str> for PortalSubscriptionCancelProrationBehavior {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for PortalSubscriptionCancelProrationBehavior {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for PortalSubscriptionCancelProrationBehavior {
fn default() -> Self {
Self::AlwaysInvoice
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum PortalSubscriptionCancellationReasonOptions {
CustomerService,
LowQuality,
MissingFeatures,
Other,
SwitchedService,
TooComplex,
TooExpensive,
Unused,
}
impl PortalSubscriptionCancellationReasonOptions {
pub fn as_str(self) -> &'static str {
match self {
PortalSubscriptionCancellationReasonOptions::CustomerService => "customer_service",
PortalSubscriptionCancellationReasonOptions::LowQuality => "low_quality",
PortalSubscriptionCancellationReasonOptions::MissingFeatures => "missing_features",
PortalSubscriptionCancellationReasonOptions::Other => "other",
PortalSubscriptionCancellationReasonOptions::SwitchedService => "switched_service",
PortalSubscriptionCancellationReasonOptions::TooComplex => "too_complex",
PortalSubscriptionCancellationReasonOptions::TooExpensive => "too_expensive",
PortalSubscriptionCancellationReasonOptions::Unused => "unused",
}
}
}
impl AsRef<str> for PortalSubscriptionCancellationReasonOptions {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for PortalSubscriptionCancellationReasonOptions {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for PortalSubscriptionCancellationReasonOptions {
fn default() -> Self {
Self::CustomerService
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum PortalSubscriptionUpdateDefaultAllowedUpdates {
Price,
PromotionCode,
Quantity,
}
impl PortalSubscriptionUpdateDefaultAllowedUpdates {
pub fn as_str(self) -> &'static str {
match self {
PortalSubscriptionUpdateDefaultAllowedUpdates::Price => "price",
PortalSubscriptionUpdateDefaultAllowedUpdates::PromotionCode => "promotion_code",
PortalSubscriptionUpdateDefaultAllowedUpdates::Quantity => "quantity",
}
}
}
impl AsRef<str> for PortalSubscriptionUpdateDefaultAllowedUpdates {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for PortalSubscriptionUpdateDefaultAllowedUpdates {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for PortalSubscriptionUpdateDefaultAllowedUpdates {
fn default() -> Self {
Self::Price
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum PortalSubscriptionUpdateProrationBehavior {
AlwaysInvoice,
CreateProrations,
None,
}
impl PortalSubscriptionUpdateProrationBehavior {
pub fn as_str(self) -> &'static str {
match self {
PortalSubscriptionUpdateProrationBehavior::AlwaysInvoice => "always_invoice",
PortalSubscriptionUpdateProrationBehavior::CreateProrations => "create_prorations",
PortalSubscriptionUpdateProrationBehavior::None => "none",
}
}
}
impl AsRef<str> for PortalSubscriptionUpdateProrationBehavior {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for PortalSubscriptionUpdateProrationBehavior {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for PortalSubscriptionUpdateProrationBehavior {
fn default() -> Self {
Self::AlwaysInvoice
}
}