use builder_pattern::Builder;
use serde::{Deserialize, Serialize};
use crate::orders::*;
use crate::serde_help::*;
#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct CreateSubscriptionRequest {
#[default(CurrencyCode::Rub)]
pub currency_code: CurrencyCode,
#[into]
pub order_id: String,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub cart: Option<RenderedCart>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(with = "option_string_as_float")]
pub future_write_off_amount: Option<f64>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub interval_count: Option<i32>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub interval_unit: Option<IntervalUnit>,
#[default(false)]
pub is_binding: bool,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<String>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub order_source: Option<OrderSource>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub purpose: Option<String>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub redirect_urls: Option<MerchantRedirectUrls>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub trial_count: Option<i32>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub trial_end_at: Option<String>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub trial_unit: Option<IntervalUnit>,
#[default(Some(1800))]
pub ttl: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum IntervalUnit {
Second,
Day,
Week,
Month,
Year,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateSubscriptionResponseData {
pub payment_url: String,
pub subscription_id: String,
}