use std::collections::HashMap;
use chrono::DateTime;
use chrono::FixedOffset;
use chrono::Utc;
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use crate::enums::*;
use crate::ids::*;
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ImportMeta {
pub external_id: Option<String>,
pub imported_from: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Address {
pub id: AddressID,
pub customer_id: CustomerID,
pub description: Option<String>,
pub first_line: Option<String>,
pub second_line: Option<String>,
pub city: Option<String>,
pub postal_code: Option<String>,
pub region: Option<String>,
pub country_code: CountryCodeSupported,
pub custom_data: Option<serde_json::Value>,
pub status: Status,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub import_meta: Option<ImportMeta>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct AddressPreview {
pub postal_code: Option<String>,
pub country_code: CountryCodeSupported,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct AdjustmentTotals {
pub subtotal: String,
pub tax: String,
pub total: String,
pub fee: String,
pub earnings: String,
pub currency_code: CurrencyCode,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Original {
pub amount: String,
pub currency_code: CurrencyCodeChargebacks,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ChargebackFee {
pub amount: String,
pub original: Option<Original>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct AdjustmentPayoutTotals {
pub subtotal: String,
pub tax: String,
pub total: String,
pub fee: String,
pub chargeback_fee: Option<ChargebackFee>,
pub earnings: String,
pub currency_code: CurrencyCodePayouts,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct AdjustmentTaxRateUsedTotals {
pub subtotal: String,
pub tax: String,
pub total: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct AdjustmentTaxRateUsed {
pub tax_rate: String,
pub totals: AdjustmentTaxRateUsedTotals,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Adjustment {
pub id: AdjustmentID,
pub action: AdjustmentAction,
pub r#type: AdjustmentType,
pub transaction_id: TransactionID,
pub subscription_id: Option<SubscriptionID>,
pub customer_id: CustomerID,
pub reason: String,
pub credit_applied_to_balance: Option<bool>,
pub currency_code: CurrencyCode,
pub status: AdjustmentStatus,
pub items: Vec<AdjustmentItem>,
pub totals: AdjustmentTotals,
pub payout_totals: Option<AdjustmentPayoutTotals>,
#[serde(default)]
pub tax_rates_used: Vec<AdjustmentTaxRateUsed>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct AdjustmentCreate {
pub id: AdjustmentID,
pub action: AdjustmentAction,
pub r#type: AdjustmentType,
pub transaction_id: TransactionID,
pub subscription_id: SubscriptionID,
pub customer_id: CustomerID,
pub reason: String,
pub credit_applied_to_balance: Option<bool>,
pub currency_code: CurrencyCode,
pub status: AdjustmentStatus,
pub items: Option<Vec<AdjustmentItem>>,
pub totals: AdjustmentTotals,
pub payout_totals: Option<AdjustmentPayoutTotals>,
pub created_at: String,
pub updated_at: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TimePeriod {
pub starts_at: DateTime<Utc>,
pub ends_at: DateTime<Utc>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Proration {
pub rate: String,
pub billing_period: TimePeriod,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct AdjustmentItemTotals {
pub subtotal: String,
pub tax: String,
pub total: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct AdjustmentItem {
pub item_id: TransactionItemID,
pub r#type: AdjustmentItemType,
pub amount: Option<String>,
pub proration: Option<Proration>,
pub totals: AdjustmentItemTotals,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct AdjustmentItemInput {
pub item_id: TransactionItemID,
pub r#type: AdjustmentItemType,
pub amount: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct AdjustmentPreview {
pub transaction_id: TransactionID,
pub items: Vec<AdjustmentItem>,
pub totals: AdjustmentTotals,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Duration {
pub interval: Interval,
pub frequency: u64,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct BillingDetails {
pub enable_checkout: bool,
pub purchase_order_number: String,
pub additional_information: Option<String>,
pub payment_terms: Duration,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct BillingDetailsUpdate {
pub enable_checkout: bool,
pub purchase_order_number: String,
pub additional_information: Option<String>,
pub payment_terms: Duration,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Contact {
pub name: String,
pub email: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Business {
pub id: BusinessID,
pub customer_id: CustomerID,
pub name: String,
pub company_number: Option<String>,
pub tax_identifier: Option<String>,
pub status: Status,
pub contacts: Option<Vec<Contact>>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub custom_data: Option<serde_json::Value>,
pub import_meta: Option<ImportMeta>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Card {
pub r#type: CardType,
pub last4: String,
pub expiry_month: i64,
pub expiry_year: i64,
pub cardholder_name: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CustomerBalance {
pub available: String,
pub reserved: String,
pub used: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CreditBalance {
pub customer_id: CustomerID,
pub currency_code: CurrencyCode,
pub balance: CustomerBalance,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Customer {
pub id: CustomerID,
pub name: Option<String>,
pub email: String,
pub marketing_consent: bool,
pub status: Status,
pub custom_data: Option<serde_json::Value>,
pub locale: String,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub import_meta: Option<ImportMeta>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct PayPal {
pub email: String,
pub reference: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct PaymentMethod {
pub id: PaymentMethodID,
pub customer_id: CustomerID,
pub address_id: AddressID,
pub r#type: SavedPaymentMethodType,
pub card: Option<Card>,
pub paypal: Option<PayPal>,
pub origin: PaymentMethodOrigin,
pub saved_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CustomerPortalSessionGeneralUrls {
pub overview: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CustomerPortalSessionSubscriptionUrls {
pub id: SubscriptionID,
pub cancel_subscription: String,
pub update_subscription_payment_method: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CustomerPortalSessionUrls {
pub general: CustomerPortalSessionGeneralUrls,
pub subscriptions: Vec<CustomerPortalSessionSubscriptionUrls>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CustomerPortalSession {
pub id: CustomerPortalSessionID,
pub customer_id: CustomerID,
pub urls: CustomerPortalSessionUrls,
pub created_at: DateTime<Utc>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CustomerAuthenticationToken {
pub customer_auth_token: String,
pub expires_at: DateTime<Utc>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Discount {
pub id: DiscountID,
pub status: DiscountStatus,
pub description: String,
pub enabled_for_checkout: bool,
pub code: Option<String>,
pub r#type: DiscountType,
pub amount: String,
pub currency_code: Option<CurrencyCode>,
pub recur: bool,
pub maximum_recurring_intervals: Option<i64>,
pub usage_limit: Option<i64>,
pub restrict_to: Option<Vec<String>>,
pub expires_at: Option<DateTime<Utc>>,
pub custom_data: Option<serde_json::Value>,
#[serde(default)]
pub times_used: i64,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub import_meta: Option<ImportMeta>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubscriptionDiscountTimePeriod {
pub id: DiscountID,
pub starts_at: Option<DateTime<FixedOffset>>,
pub ends_at: Option<DateTime<FixedOffset>>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Errors {
pub field: String,
pub message: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Error {
pub r#type: Type,
pub code: String,
pub detail: String,
pub documentation_url: String,
pub errors: Vec<Errors>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Meta {
pub request_id: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ValidationError {
pub error: Error,
pub meta: Meta,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Event {
pub event_id: EventID,
pub occurred_at: DateTime<Utc>,
#[serde(flatten)]
pub data: EventData,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct EventType {
pub name: String, pub description: String,
pub group: String,
pub available_versions: Vec<u64>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Money {
pub amount: String,
pub currency_code: CurrencyCode,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct UnitPriceOverride {
pub country_codes: Vec<CountryCodeSupported>,
pub unit_price: Money,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct PriceQuantity {
pub minimum: u64,
pub maximum: u64,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Price {
pub id: PriceID,
pub product_id: ProductID,
pub description: String,
pub r#type: CatalogType,
pub name: Option<String>,
pub billing_cycle: Option<Duration>,
pub trial_period: Option<Duration>,
pub tax_mode: TaxMode,
pub unit_price: Money,
#[serde(default)]
pub unit_price_overrides: Vec<UnitPriceOverride>,
pub quantity: PriceQuantity,
pub status: Status,
pub custom_data: Option<serde_json::Value>,
pub import_meta: Option<ImportMeta>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Product {
pub id: ProductID,
pub name: String,
pub description: Option<String>,
pub r#type: CatalogType,
pub tax_category: TaxCategory,
pub image_url: Option<String>,
pub custom_data: Option<serde_json::Value>,
pub status: Status,
pub import_meta: Option<ImportMeta>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub prices: Option<Vec<Price>>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubscriptionItem {
pub status: SubscriptionItemStatus,
pub quantity: i64,
pub recurring: bool,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub previously_billed_at: Option<DateTime<FixedOffset>>,
pub next_billed_at: Option<DateTime<FixedOffset>>,
pub trial_dates: Option<TimePeriod>,
pub price: Price,
pub product: Product,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Pagination {
pub per_page: i64,
pub next: String,
pub has_more: bool,
pub estimated_total: i64,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct MetaPaginated {
pub request_id: String,
pub pagination: Pagination,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct MethodDetails {
pub r#type: PaymentMethodType,
pub card: Option<Card>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct NotificationPayload {
pub notification_id: NotificationID,
pub event_id: EventID,
pub event_type: EventTypeName,
pub occurred_at: String,
pub data: HashMap<String, String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Notification {
pub id: NotificationID,
pub r#type: EventTypeName,
pub status: NotificationStatus,
pub payload: NotificationPayload,
pub occurred_at: DateTime<FixedOffset>,
pub delivered_at: Option<DateTime<FixedOffset>>,
pub replayed_at: Option<DateTime<FixedOffset>>,
pub origin: NotificationOrigin,
pub last_attempt_at: Option<DateTime<FixedOffset>>,
pub retry_at: Option<DateTime<FixedOffset>>,
pub times_attempted: i64,
pub notification_setting_id: NotificationSettingID,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct NotificationLog {
pub id: NotificationLogID,
pub response_code: i64,
pub response_content_type: Option<String>,
pub response_body: String,
pub attempted_at: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct NotificationSetting {
pub id: NotificationSettingID,
pub description: String,
pub r#type: NotificationSettingType,
pub destination: String,
pub active: bool,
pub api_version: i64,
pub include_sensitive_fields: bool,
pub subscribed_events: Vec<EventType>,
pub endpoint_secret_key: EndpointSecretKey,
pub traffic_source: TrafficSource,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct NotificationSettingCreate {
pub id: NotificationSettingID,
pub description: String,
pub r#type: NotificationSettingType,
pub destination: String,
pub active: bool,
pub api_version: i64,
pub include_sensitive_fields: bool,
pub subscribed_events: Vec<String>,
pub endpoint_secret_key: EndpointSecretKey,
pub traffic_source: TrafficSource,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct NotificationSettingUpdate {
pub description: String,
pub destination: String,
pub active: bool,
pub api_version: i64,
pub include_sensitive_fields: bool,
pub subscribed_events: Option<Vec<String>>,
pub traffic_source: TrafficSource,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct PricePreview {
pub id: Option<PriceID>,
pub product_id: Option<ProductID>,
pub description: String,
pub r#type: CatalogType,
pub name: Option<String>,
pub billing_cycle: Option<Duration>,
pub trial_period: Option<Duration>,
pub tax_mode: TaxMode,
pub unit_price: Money,
pub unit_price_overrides: Vec<UnitPriceOverride>,
pub quantity: PriceQuantity,
pub status: Status,
pub custom_data: Option<serde_json::Value>,
pub import_meta: ImportMeta,
pub created_at: String,
pub updated_at: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ProductPreview {
pub id: Option<ProductID>,
pub name: String,
pub description: Option<String>,
pub r#type: CatalogType,
pub tax_category: TaxCategory,
pub image_url: Option<String>,
pub custom_data: Option<serde_json::Value>,
pub status: Status,
pub import_meta: Option<ImportMeta>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(untagged)]
pub enum ReportFilterValue {
String(String),
Array(Vec<String>),
}
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct ReportFilter<T: Serialize> {
pub name: T,
pub operator: Option<FilterOperator>,
pub value: ReportFilterValue,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ReportBase {
pub id: PaddleID,
pub r#type: String,
pub filters: Vec<serde_json::Value>,
pub status: ReportStatus,
pub rows: Option<i64>,
pub expires_at: Option<DateTime<Utc>>,
pub updated_at: DateTime<Utc>,
pub created_at: DateTime<Utc>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SimulationEventRequest {
pub body: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SimulationEventResponse {
pub body: String,
pub status_code: i64,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SimulationEvent {
pub id: SimulationEventID,
pub status: SimulationEventStatus,
pub event_type: EventTypeName,
pub payload: serde_json::Value,
pub request: SimulationEventRequest,
pub response: SimulationEventResponse,
pub created_at: String,
pub updated_at: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SimulationRunScenario {
pub id: SimulationRunID,
pub status: SimulationRunStatus,
pub created_at: String,
pub updated_at: String,
pub r#type: SimulationScenarioType,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SimulationRunSingleEvent {
pub id: SimulationRunID,
pub status: SimulationRunStatus,
pub created_at: String,
pub updated_at: String,
pub r#type: EventTypeName,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SimulationScenario {
pub id: SimulationID,
pub status: Status,
pub notification_setting_id: NotificationSettingID,
pub name: String,
pub r#type: SimulationScenarioType,
pub payload: Option<serde_json::Value>,
pub last_run_at: Option<DateTime<FixedOffset>>,
pub created_at: String,
pub updated_at: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SimulationScenarioCreate {
pub notification_setting_id: NotificationSettingID,
pub name: String,
pub r#type: SimulationScenarioType,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SimulationScenarioUpdate {
pub notification_setting_id: NotificationSettingID,
pub name: Option<String>,
pub status: Status,
pub r#type: SimulationScenarioType,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SimulationSingleEventCreate {
pub notification_setting_id: NotificationSettingID,
pub name: Option<String>,
pub r#type: EventTypeName,
pub payload: Option<serde_json::Value>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SimulationSingleEventUpdate {
pub notification_setting_id: NotificationSettingID,
pub name: Option<String>,
pub status: Status,
pub r#type: EventTypeName,
pub payload: Option<serde_json::Value>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SimulationType {
pub name: String,
pub label: String,
pub description: String,
pub group: String,
pub r#type: SimulationKind,
pub events: Vec<EventTypeName>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubscriptionScheduledChange {
pub action: ScheduledChangeAction,
pub effective_at: DateTime<FixedOffset>,
pub resume_at: Option<DateTime<FixedOffset>>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubscriptionManagementUrls {
pub update_payment_method: Option<String>,
pub cancel: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Subscription {
pub id: SubscriptionID,
pub status: SubscriptionStatus,
pub customer_id: CustomerID,
pub address_id: AddressID,
pub business_id: Option<BusinessID>,
pub currency_code: CurrencyCode,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub started_at: Option<DateTime<Utc>>,
pub first_billed_at: Option<DateTime<Utc>>,
pub next_billed_at: Option<DateTime<Utc>>,
pub paused_at: Option<DateTime<Utc>>,
pub canceled_at: Option<DateTime<Utc>>,
pub discount: Option<SubscriptionDiscountTimePeriod>,
pub collection_mode: CollectionMode,
pub billing_details: Option<BillingDetails>,
pub current_billing_period: Option<TimePeriod>,
pub billing_cycle: Duration,
pub scheduled_change: Option<SubscriptionScheduledChange>,
pub management_urls: Option<SubscriptionManagementUrls>,
pub items: Vec<SubscriptionItem>,
pub custom_data: Option<serde_json::Value>,
pub import_meta: Option<ImportMeta>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum SubscriptionChargeItem {
CatalogItem(SubscriptionItemCreateWithPriceId),
NonCatalogExistingProduct(SubscriptionChargeCreateWithPrice),
NonCatalogPriceAndProduct(SubscriptionChargeCreateWithPriceAndProduct),
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubscriptionCharge {
pub effective_from: EffectiveFrom,
pub items: Vec<SubscriptionChargeItem>,
pub on_payment_failure: SubscriptionOnPaymentFailure,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Totals {
pub subtotal: String,
pub discount: String,
pub tax: String,
pub total: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TaxRatesUsed {
pub tax_rate: String,
pub totals: Totals,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionTotals {
pub subtotal: String,
pub discount: String,
pub tax: String,
pub total: String,
pub credit: String,
pub credit_to_balance: String,
pub balance: String,
pub grand_total: String,
pub fee: Option<String>,
pub earnings: Option<String>,
pub currency_code: CurrencyCode,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubscriptionTransactionDetailsPreviewItem {
pub price_id: Option<PriceID>,
pub quantity: i64,
pub tax_rate: String,
pub unit_totals: Totals,
pub totals: Totals,
pub product: ProductPreview,
pub proration: Option<Proration>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubscriptionTransactionDetailsPreview {
pub tax_rates_used: Vec<TaxRatesUsed>,
pub totals: TransactionTotals,
pub line_items: Vec<SubscriptionTransactionDetailsPreviewItem>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct NextTransaction {
pub billing_period: TimePeriod,
pub details: SubscriptionTransactionDetailsPreview,
pub adjustments: Vec<AdjustmentPreview>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubscriptionWithInclude {
#[serde(flatten)]
pub subscription: Subscription,
pub next_transaction: Option<NextTransaction>,
pub recurring_transaction_details: Option<SubscriptionTransactionDetailsPreview>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct UpdateSummaryResult {
pub action: UpdateSummaryResultAction,
pub amount: String,
pub currency_code: CurrencyCode,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubscriptionPreviewUpdateSummary {
pub credit: Money,
pub charge: Money,
pub result: UpdateSummaryResult,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubscriptionPreview {
pub status: SubscriptionStatus,
pub customer_id: CustomerID,
pub address_id: AddressID,
pub business_id: Option<BusinessID>,
pub currency_code: CurrencyCode,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub started_at: Option<DateTime<Utc>>,
pub first_billed_at: Option<DateTime<Utc>>,
pub next_billed_at: Option<DateTime<Utc>>,
pub paused_at: Option<DateTime<Utc>>,
pub canceled_at: Option<DateTime<Utc>>,
pub discount: Option<Discount>,
pub collection_mode: CollectionMode,
pub billing_details: Option<BillingDetails>,
pub current_billing_period: Option<TimePeriod>,
pub billing_cycle: Duration,
pub scheduled_change: Option<SubscriptionScheduledChange>,
pub management_urls: SubscriptionManagementUrls,
pub items: Vec<SubscriptionItem>,
pub custom_data: Option<serde_json::Value>,
pub immediate_transaction: Option<NextTransaction>,
pub next_transaction: NextTransaction,
pub recurring_transaction_details: SubscriptionTransactionDetailsPreview,
pub update_summary: Option<SubscriptionPreviewUpdateSummary>,
pub import_meta: Option<ImportMeta>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubscriptionDiscountEffectiveFrom {
pub id: DiscountID,
pub effective_from: EffectiveFrom,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubscriptionUpdate {
pub customer_id: CustomerID,
pub address_id: AddressID,
pub business_id: BusinessID,
pub currency_code: CurrencyCode,
pub next_billed_at: DateTime<Utc>,
pub discount: SubscriptionDiscountEffectiveFrom,
pub collection_mode: CollectionMode,
pub billing_details: BillingDetails,
pub scheduled_change: Option<()>,
pub items: Vec<SubscriptionChargeItem>,
pub custom_data: Option<serde_json::Value>,
pub proration_billing_mode: ProrationBillingMode,
pub on_payment_failure: SubscriptionOnPaymentFailure,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubscriptionChargeCreateWithPricePrice {
pub product_id: ProductID,
pub description: String,
pub name: Option<String>,
pub tax_mode: TaxMode,
pub unit_price: Money,
pub unit_price_overrides: Vec<UnitPriceOverride>,
pub quantity: PriceQuantity,
pub custom_data: Option<serde_json::Value>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubscriptionChargeCreateWithPriceAndProduct {
pub description: String,
pub name: Option<String>,
pub tax_mode: TaxMode,
pub unit_price: Money,
pub unit_price_overrides: Vec<UnitPriceOverride>,
pub quantity: PriceQuantity,
pub custom_data: Option<serde_json::Value>,
pub product: TransactionSubscriptionProductCreate,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubscriptionChargeCreateWithPrice {
pub quantity: i64,
pub price: SubscriptionChargeCreateWithPricePrice,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionPriceCreateWithProductId {
pub description: String,
pub name: Option<String>,
pub billing_cycle: Option<Duration>,
pub trial_period: Option<Duration>,
pub tax_mode: TaxMode,
pub unit_price: Money,
pub unit_price_overrides: Vec<UnitPriceOverride>,
pub quantity: PriceQuantity,
pub custom_data: Option<serde_json::Value>,
pub product_id: ProductID,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubscriptionItemCreateWithPrice {
pub quantity: i64,
pub price: TransactionPriceCreateWithProductId,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubscriptionItemCreateWithPriceId {
pub quantity: i64,
pub price_id: PriceID,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubscriptionUpdateItem {
pub price_id: PriceID,
pub quantity: i64,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TotalsWithoutDiscount {
pub subtotal: String,
pub tax: String,
pub total: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionItem {
pub price: Price,
pub quantity: i64,
pub proration: Option<Proration>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionTotalsAdjusted {
pub subtotal: String,
pub tax: String,
pub total: String,
pub grand_total: String,
pub fee: Option<String>,
pub earnings: Option<String>,
pub currency_code: CurrencyCode,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionPayoutTotalsAdjusted {
pub subtotal: String,
pub tax: String,
pub total: String,
pub fee: String,
pub chargeback_fee: ChargebackFee,
pub earnings: String,
pub currency_code: CurrencyCodePayouts,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionLineItemWithId {
pub id: TransactionItemID,
pub price_id: PriceID,
pub quantity: i64,
pub proration: Option<Proration>,
pub tax_rate: String,
pub unit_totals: Totals,
pub totals: Totals,
pub product: Product,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionDetails {
pub tax_rates_used: Vec<TaxRatesUsed>,
pub totals: TransactionTotals,
pub adjusted_totals: TransactionTotalsAdjusted,
pub payout_totals: Option<TransactionPayoutTotals>,
pub adjusted_payout_totals: Option<TransactionPayoutTotalsAdjusted>,
pub line_items: Vec<TransactionLineItemWithId>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionPaymentAttempt {
pub payment_attempt_id: String,
pub stored_payment_method_id: String,
pub payment_method_id: Option<PaymentMethodID>,
pub amount: String,
pub status: PaymentAttemptStatus,
pub error_code: Option<ErrorCode>,
pub method_details: MethodDetails,
pub created_at: String,
pub captured_at: Option<DateTime<FixedOffset>>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionCheckout {
pub url: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionInvoice {
pub url: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Transaction {
pub id: TransactionID,
pub status: TransactionStatus,
pub customer_id: Option<CustomerID>,
pub address_id: Option<AddressID>,
pub business_id: Option<BusinessID>,
pub custom_data: Option<serde_json::Value>,
pub currency_code: CurrencyCode,
pub origin: TransactionOrigin,
pub subscription_id: Option<SubscriptionID>,
pub invoice_id: Option<InvoiceId>,
pub invoice_number: Option<String>,
pub collection_mode: CollectionMode,
pub discount_id: Option<DiscountID>,
pub billing_details: Option<BillingDetails>,
pub billing_period: Option<TimePeriod>,
pub items: Vec<TransactionItem>,
pub details: TransactionDetails,
pub payments: Vec<TransactionPaymentAttempt>,
pub checkout: TransactionCheckout,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub billed_at: Option<DateTime<Utc>>,
pub revised_at: Option<DateTime<Utc>>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionCreate {
pub id: TransactionID,
pub status: TransactionStatus,
pub customer_id: CustomerID,
pub address_id: AddressID,
pub business_id: BusinessID,
pub custom_data: Option<serde_json::Value>,
pub currency_code: CurrencyCode,
pub origin: TransactionOrigin,
pub subscription_id: SubscriptionID,
pub invoice_id: InvoiceId,
pub invoice_number: Option<String>,
pub collection_mode: CollectionMode,
pub discount_id: DiscountID,
pub billing_details: BillingDetails,
pub billing_period: Option<TimePeriod>,
pub items: Vec<SubscriptionChargeItem>,
pub details: TransactionDetails,
pub payments: Vec<TransactionPaymentAttempt>,
pub checkout: TransactionCheckout,
pub created_at: DateTime<FixedOffset>,
pub updated_at: DateTime<FixedOffset>,
pub billed_at: Option<DateTime<FixedOffset>>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionLineItemPreview {
pub price_id: Option<PriceID>,
pub quantity: i64,
pub tax_rate: String,
pub unit_totals: Totals,
pub totals: Totals,
pub product: ProductPreview,
pub proration: Option<Proration>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionDetailsPreview {
pub tax_rates_used: Vec<TaxRatesUsed>,
pub totals: TransactionTotals,
pub line_items: Vec<TransactionLineItemPreview>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionPreview {
pub customer_id: Option<CustomerID>,
pub address_id: Option<AddressID>,
pub business_id: Option<BusinessID>,
pub currency_code: CurrencyCode,
pub discount_id: Option<DiscountID>,
pub customer_ip_address: Option<String>,
pub address: Option<AddressPreview>,
pub ignore_trials: bool,
pub items: Vec<TransactionItemPreviewBase>,
pub details: TransactionDetailsPreview,
pub available_payment_methods: Vec<PaymentMethodType>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct PricingPreview {
pub customer_id: Option<CustomerID>,
pub address_id: Option<AddressID>,
pub business_id: Option<BusinessID>,
pub currency_code: CurrencyCode,
pub discount_id: Option<DiscountID>,
pub address: Option<AddressPreview>,
pub customer_ip_address: Option<String>,
pub details: PricePreviewDetails,
pub available_payment_methods: Vec<PaymentMethodType>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionPreviewCreate {
pub customer_id: CustomerID,
pub currency_code: CurrencyCode,
pub discount_id: DiscountID,
pub ignore_trials: bool,
pub items: Vec<SubscriptionChargeItem>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionPriceCreateBase {
pub description: String,
pub name: Option<String>,
pub billing_cycle: Option<Duration>,
pub trial_period: Option<Duration>,
pub tax_mode: TaxMode,
pub unit_price: Money,
pub unit_price_overrides: Vec<UnitPriceOverride>,
pub quantity: PriceQuantity,
pub custom_data: Option<serde_json::Value>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionRevise {
pub customer: Customer,
pub business: Business,
pub address: Address,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionSubscriptionProductCreate {
pub name: String,
pub description: Option<String>,
pub tax_category: TaxCategory,
pub image_url: Option<String>,
pub custom_data: Option<serde_json::Value>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionUpdate {
pub id: TransactionID,
pub status: TransactionStatus,
pub customer_id: CustomerID,
pub address_id: AddressID,
pub business_id: BusinessID,
pub custom_data: Option<serde_json::Value>,
pub currency_code: CurrencyCode,
pub origin: TransactionOrigin,
pub subscription_id: SubscriptionID,
pub invoice_id: InvoiceId,
pub invoice_number: Option<String>,
pub collection_mode: CollectionMode,
pub discount_id: DiscountID,
pub billing_details: BillingDetails,
pub billing_period: Option<TimePeriod>,
pub items: Vec<SubscriptionChargeItem>,
pub details: TransactionDetails,
pub payments: Vec<TransactionPaymentAttempt>,
pub checkout: TransactionCheckout,
pub created_at: DateTime<FixedOffset>,
pub updated_at: DateTime<FixedOffset>,
pub billed_at: Option<DateTime<FixedOffset>>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionItemCreateBase {
pub quantity: i64,
pub proration: Proration,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionLineItem {
pub price_id: PriceID,
pub quantity: i64,
pub proration: Proration,
pub tax_rate: String,
pub unit_totals: Totals,
pub totals: Totals,
pub product: Product,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionPayoutTotals {
pub subtotal: String,
pub discount: String,
pub tax: String,
pub total: String,
pub credit: String,
pub credit_to_balance: String,
pub balance: String,
pub grand_total: String,
pub fee: String,
pub earnings: String,
pub currency_code: CurrencyCodePayouts,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionItemPreviewBase {
pub quantity: i64,
pub include_in_totals: bool,
pub proration: Option<Proration>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct PricePreviewBase {
pub customer_id: CustomerID,
pub address_id: AddressID,
pub business_id: BusinessID,
pub currency_code: CurrencyCode,
pub discount_id: DiscountID,
pub address: Address,
pub customer_ip_address: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct PricePreviewDiscounts {
pub discount: Discount,
pub total: String,
pub formatted_total: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct PricePreviewLineItem {
pub price: Price,
pub quantity: i64,
pub tax_rate: String,
pub unit_totals: Totals,
pub formatted_unit_totals: Totals,
pub totals: Totals,
pub formatted_totals: Totals,
pub product: Product,
pub discounts: Vec<PricePreviewDiscounts>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Payout {
pub id: PayoutID,
pub status: PayoutStatus,
pub amount: String,
pub currency_code: CurrencyCodeChargebacks,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ApiKey {
pub id: ApiKeyID,
pub name: String,
pub description: Option<String>,
pub key: String,
pub status: ApiKeyStatus,
pub permissions: Vec<String>,
pub expires_at: Option<DateTime<Utc>>,
pub last_used_at: Option<DateTime<Utc>>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct PricePreviewDetails {
pub line_items: Vec<PricePreviewLineItem>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct PricePreviewItem {
pub price_id: PriceID,
pub quantity: i64,
}
#[skip_serializing_none]
#[derive(Serialize)]
pub struct TransactionItemNonCatalogPrice {
description: String,
name: Option<String>,
billing_cycle: Option<Duration>,
trial_period: Option<Duration>,
tax_mode: Option<TaxMode>,
unit_price: Money,
unit_price_overrides: Option<Vec<UnitPriceOverride>>,
quantity: Option<PriceQuantity>,
custom_data: Option<serde_json::Value>,
product_id: Option<ProductID>,
product: Option<TransactionSubscriptionProductCreate>,
}
impl TransactionItemNonCatalogPrice {
pub fn new(description: impl Into<String>, amount: u64, currency: CurrencyCode) -> Self {
Self {
description: description.into(),
name: None,
billing_cycle: None,
trial_period: None,
tax_mode: None,
unit_price: Money {
amount: amount.to_string(),
currency_code: currency,
},
unit_price_overrides: None,
quantity: None,
custom_data: None,
product_id: None,
product: None,
}
}
pub fn name(mut self, name: impl Into<String>) -> Self {
self.name = Some(name.into());
self
}
pub fn billing_cycle(mut self, billing_cycle: Duration) -> Self {
self.billing_cycle = Some(billing_cycle);
self
}
pub fn trial_period(mut self, trial_period: Duration) -> Self {
self.trial_period = Some(trial_period);
self
}
pub fn tax_mode(mut self, tax_mode: TaxMode) -> Self {
self.tax_mode = Some(tax_mode);
self
}
pub fn add_unit_price_override(
mut self,
country_codes: impl IntoIterator<Item = CountryCodeSupported>,
amount: u64,
currency: CurrencyCode,
) -> Self {
if self.unit_price_overrides.is_none() {
self.unit_price_overrides = Some(vec![]);
}
self.unit_price_overrides
.as_mut()
.unwrap()
.push(UnitPriceOverride {
country_codes: country_codes.into_iter().collect(),
unit_price: Money {
amount: amount.to_string(),
currency_code: currency,
},
});
self
}
pub fn set_unit_price_overrides(mut self, overrides: Vec<UnitPriceOverride>) -> Self {
self.unit_price_overrides = Some(overrides);
self
}
pub fn quantity(mut self, quantity: PriceQuantity) -> Self {
self.quantity = Some(quantity);
self
}
pub fn custom_data(mut self, custom_data: serde_json::Value) -> Self {
self.custom_data = Some(custom_data);
self
}
pub fn product_id(mut self, product_id: impl Into<ProductID>) -> Self {
self.product_id = Some(product_id.into());
self.product = None;
self
}
pub fn product(mut self, product: TransactionSubscriptionProductCreate) -> Self {
self.product = Some(product);
self.product_id = None;
self
}
}