yandex_pay_api/
orders_capture.rs1use crate::{
2 orders_id::{CartItemType, Coupon, Discount, Measurements, ShippingMethodType},
3 serde_help::*,
4 *,
5};
6use builder_pattern::Builder;
7use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
10#[serde(rename_all = "camelCase")]
11pub struct CaptureOrderRequest {
13 #[default(None)]
14 #[serde(skip_serializing_if = "Option::is_none")]
15 pub cart: Option<CartWithRequiredTotalWithoutFinalPrice>,
17 #[default(None)]
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub external_operation_id: Option<String>,
21 #[default(None)]
22 #[serde(with = "option_string_as_float")]
23 #[serde(skip_serializing_if = "Option::is_none")]
24 pub order_amount: Option<f64>,
26 #[default(None)]
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub shipping: Option<ShippingPrice>,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
33#[serde(rename_all = "camelCase")]
34pub struct ShippingPrice {
36 #[serde(with = "string_as_float")]
37 pub amount: f64,
38 pub method_type: ShippingMethodType,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
42#[serde(rename_all = "camelCase")]
43pub struct CartWithRequiredTotalWithoutFinalPrice {
45 pub items: Vec<CartItemWithoutFinalPriceCamelCase>,
47 pub total: CartTotal,
49 #[default(None)]
50 #[serde(skip_serializing_if = "Option::is_none")]
51 pub cart_id: Option<String>,
53 #[serde(skip_serializing_if = "Vec::is_empty")]
54 #[default(vec![])]
55 pub coupons: Vec<Coupon>,
57 #[serde(skip_serializing_if = "Vec::is_empty")]
58 #[default(vec![])]
59 pub discounts: Vec<Discount>,
61 #[serde(skip_serializing_if = "Option::is_none")]
62 #[default(None)]
63 pub external_id: Option<String>,
65 #[default(None)]
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub measurements: Option<Measurements>,
69 #[into]
70 #[default(CartVersion::default())]
71 pub version: CartVersion,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize, Default)]
76pub enum CartVersion {
77 #[default]
78 #[serde(rename = "VALID")]
79 Valid,
81 #[serde(rename = "SEMIVALID")]
82 SemiValid,
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
86#[serde(rename_all = "camelCase")]
87pub struct CartItemWithoutFinalPriceCamelCase {
89 #[into]
90 pub product_id: String,
92 pub quantity: ItemQuantity,
94 #[serde(skip_serializing_if = "Option::is_none")]
96 #[default(None)]
97 pub description: Option<String>,
98 #[serde(skip_serializing_if = "Option::is_none")]
100 #[serde(with = "option_string_as_float")]
101 #[default(None)]
102 pub discounted_unit_price: Option<f64>,
103 #[serde(skip_serializing_if = "Option::is_none")]
105 #[default(None)]
106 pub features: Option<CartItemFeatures>,
107 #[serde(skip_serializing_if = "Option::is_none")]
109 #[default(None)]
110 pub measurements: Option<Measurements>,
111 #[serde(skip_serializing_if = "Option::is_none")]
113 #[serde(with = "option_string_as_float")]
114 #[default(None)]
115 pub points_amount: Option<f64>,
116 #[serde(skip_serializing_if = "Option::is_none")]
118 #[default(None)]
119 pub receipt: Option<ItemReceipt>,
120 #[serde(skip_serializing_if = "Option::is_none")]
122 #[serde(with = "option_string_as_float")]
123 #[default(None)]
124 pub subtotal: Option<f64>,
125 #[serde(skip_serializing_if = "Option::is_none")]
127 #[default(None)]
128 pub title: Option<String>,
129 #[serde(skip_serializing_if = "Option::is_none")]
131 #[default(None)]
132 pub item_type: Option<CartItemType>,
133 #[serde(skip_serializing_if = "Option::is_none")]
135 #[serde(with = "option_string_as_float")]
136 #[default(None)]
137 pub unit_price: Option<f64>,
138}