use crate::{
orders_id::{CartItemType, Coupon, Discount, Measurements, ShippingMethodType},
serde_help::*,
*,
};
use builder_pattern::Builder;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct CaptureOrderRequest {
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub cart: Option<CartWithRequiredTotalWithoutFinalPrice>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub external_operation_id: Option<String>,
#[default(None)]
#[serde(with = "option_string_as_float")]
#[serde(skip_serializing_if = "Option::is_none")]
pub order_amount: Option<f64>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub shipping: Option<ShippingPrice>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct ShippingPrice {
#[serde(with = "string_as_float")]
pub amount: f64,
pub method_type: ShippingMethodType,
}
#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct CartWithRequiredTotalWithoutFinalPrice {
pub items: Vec<CartItemWithoutFinalPriceCamelCase>,
pub total: CartTotal,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub cart_id: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
#[default(vec![])]
pub coupons: Vec<Coupon>,
#[serde(skip_serializing_if = "Vec::is_empty")]
#[default(vec![])]
pub discounts: Vec<Discount>,
#[serde(skip_serializing_if = "Option::is_none")]
#[default(None)]
pub external_id: Option<String>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub measurements: Option<Measurements>,
#[into]
#[default(CartVersion::default())]
pub version: CartVersion,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub enum CartVersion {
#[default]
#[serde(rename = "VALID")]
Valid,
#[serde(rename = "SEMIVALID")]
SemiValid,
}
#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct CartItemWithoutFinalPriceCamelCase {
#[into]
pub product_id: String,
pub quantity: ItemQuantity,
#[serde(skip_serializing_if = "Option::is_none")]
#[default(None)]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(with = "option_string_as_float")]
#[default(None)]
pub discounted_unit_price: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[default(None)]
pub features: Option<CartItemFeatures>,
#[serde(skip_serializing_if = "Option::is_none")]
#[default(None)]
pub measurements: Option<Measurements>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(with = "option_string_as_float")]
#[default(None)]
pub points_amount: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[default(None)]
pub receipt: Option<ItemReceipt>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(with = "option_string_as_float")]
#[default(None)]
pub subtotal: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[default(None)]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[default(None)]
pub item_type: Option<CartItemType>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(with = "option_string_as_float")]
#[default(None)]
pub unit_price: Option<f64>,
}