use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::domain::{Money, ProtocolExtensions};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Ap2PaymentRequest {
pub id: String,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub method_data: Vec<Ap2PaymentMethodData>,
pub details: Ap2PaymentDetails,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub options: Option<Ap2PaymentOptions>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub risk_data: Option<Ap2RiskData>,
#[serde(default, skip_serializing_if = "ProtocolExtensions::is_empty")]
pub extensions: ProtocolExtensions,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Ap2PaymentMethodData {
pub supported_methods: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub data: Option<Value>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Ap2PaymentDetails {
pub total: Money,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub display_items: Vec<Ap2DisplayItem>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Ap2DisplayItem {
pub label: String,
pub amount: Money,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Ap2PaymentOptions {
#[serde(default)]
pub request_shipping: bool,
#[serde(default)]
pub request_payer_email: bool,
#[serde(default)]
pub request_payer_phone: bool,
#[serde(default)]
pub request_payer_name: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Ap2PaymentResponse {
pub id: String,
pub method_name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub details: Option<Value>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub payer_email: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub payer_phone: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub payer_name: Option<String>,
#[serde(default, skip_serializing_if = "ProtocolExtensions::is_empty")]
pub extensions: ProtocolExtensions,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Ap2RiskData {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub score: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub source: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub action: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub signals: Vec<Value>,
#[serde(default, skip_serializing_if = "ProtocolExtensions::is_empty")]
pub extensions: ProtocolExtensions,
}