use serde::{Deserialize, Serialize};
use super::{
billing_period_enum::BillingPeriodEnum, currency::Currency, customer_id::CustomerId,
payment_methods_config::PaymentMethodsConfig, plan_id::PlanId, plan_version_id::PlanVersionId,
subscription_id::SubscriptionId, subscription_status_enum::SubscriptionStatusEnum,
};
#[derive(Clone, Debug, Default, PartialEq, Deserialize, Serialize)]
pub struct Subscription {
#[serde(skip_serializing_if = "Option::is_none")]
pub activated_at: Option<String>,
pub auto_advance_invoices: bool,
pub billing_day_anchor: i32,
#[serde(skip_serializing_if = "Option::is_none")]
pub billing_start_date: Option<String>,
pub charge_automatically: bool,
pub created_at: String,
pub currency: Currency,
#[serde(skip_serializing_if = "Option::is_none")]
pub current_period_end: Option<String>,
pub current_period_start: String,
pub custom_properties: serde_json::Value,
#[serde(skip_serializing_if = "Option::is_none")]
pub customer_alias: Option<String>,
pub customer_id: CustomerId,
pub customer_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_date: Option<String>,
pub id: SubscriptionId,
#[serde(skip_serializing_if = "Option::is_none")]
pub invoice_memo: Option<String>,
pub mrr_cents: i32,
pub net_terms: i32,
#[serde(skip_serializing_if = "Option::is_none")]
pub payment_methods_config: Option<PaymentMethodsConfig>,
pub period: BillingPeriodEnum,
#[serde(skip_serializing_if = "Option::is_none")]
pub plan_description: Option<String>,
pub plan_id: PlanId,
pub plan_name: String,
pub plan_version: i32,
pub plan_version_id: PlanVersionId,
#[serde(skip_serializing_if = "Option::is_none")]
pub purchase_order: Option<String>,
pub start_date: String,
pub status: SubscriptionStatusEnum,
#[serde(skip_serializing_if = "Option::is_none")]
pub trial_duration: Option<i32>,
}
impl Subscription {
pub fn new(
auto_advance_invoices: bool,
billing_day_anchor: i32,
charge_automatically: bool,
created_at: String,
currency: Currency,
current_period_start: String,
custom_properties: serde_json::Value,
customer_id: CustomerId,
customer_name: String,
id: SubscriptionId,
mrr_cents: i32,
net_terms: i32,
period: BillingPeriodEnum,
plan_id: PlanId,
plan_name: String,
plan_version: i32,
plan_version_id: PlanVersionId,
start_date: String,
status: SubscriptionStatusEnum,
) -> Self {
Self {
activated_at: None,
auto_advance_invoices,
billing_day_anchor,
billing_start_date: None,
charge_automatically,
created_at,
currency,
current_period_end: None,
current_period_start,
custom_properties,
customer_alias: None,
customer_id,
customer_name,
end_date: None,
id,
invoice_memo: None,
mrr_cents,
net_terms,
payment_methods_config: None,
period,
plan_description: None,
plan_id,
plan_name,
plan_version,
plan_version_id,
purchase_order: None,
start_date,
status,
trial_duration: None,
}
}
}