use crate::serde_help::*;
use builder_pattern::Builder;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct RefundRequest {
#[serde(with = "string_as_float")]
pub refund_amount: f64,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub branch_id: Option<String>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub external_operation_id: Option<String>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub manager_id: Option<String>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub motive: Option<String>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub refund_cart: Option<TargetCart>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub target_cart: Option<TargetCart>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
pub target_shipping: Option<TargetShipping>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct TargetCart {
#[serde(skip_serializing_if = "Vec::is_empty")]
pub items: Vec<TargetCartItem>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct TargetCartItem {
#[into]
pub product_id: String,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(with = "option_string_as_float")]
pub price: Option<f64>,
#[default(None)]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(with = "option_string_as_float")]
pub quantity_count: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct TargetShipping {
#[serde(with = "string_as_float")]
pub amount: f64,
}