use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Payment {
#[serde(default)]
pub uuid: String,
#[serde(default)]
pub order_id: String,
#[serde(default)]
pub amount: String,
#[serde(default)]
pub payment_amount: Option<String>,
#[serde(default)]
pub amount_paid: String,
#[serde(default)]
pub amount_remaining: String,
#[serde(default)]
pub payer_amount: String,
#[serde(default)]
pub payer_currency: String,
#[serde(default)]
pub currency: String,
#[serde(default)]
pub network: String,
#[serde(default)]
pub address: String,
#[serde(default)]
pub address_qr_code: String,
#[serde(default)]
pub payment_status: String,
#[serde(default)]
pub is_multi: bool,
#[serde(default)]
pub url: String,
#[serde(default)]
pub expired_at: i64,
#[serde(default)]
pub is_final: bool,
#[serde(default)]
pub created_at: String,
#[serde(default)]
pub updated_at: String,
#[serde(default)]
pub additional_data: String,
#[serde(default)]
pub payer_email: String,
#[serde(default)]
pub url_return: String,
#[serde(default)]
pub url_success: String,
#[serde(default)]
pub rate_expires_at: i64,
#[serde(default)]
pub confirmations: i64,
#[serde(default)]
pub required_confirmations: i64,
#[serde(default)]
pub txid: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Paginate {
#[serde(default)]
pub count: i64,
#[serde(default)]
pub per_page: i64,
#[serde(default)]
pub offset: i64,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct PaymentList {
#[serde(default)]
pub items: Vec<Payment>,
#[serde(default)]
pub paginate: Paginate,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Limit {
#[serde(default)]
pub min_amount: String,
#[serde(default)]
pub max_amount: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Commission {
#[serde(default)]
pub fee_amount: String,
#[serde(default)]
pub percent: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct ServiceMethod {
#[serde(default)]
pub network: String,
#[serde(default)]
pub currency: String,
#[serde(default)]
pub is_available: bool,
#[serde(default)]
pub limit: Limit,
#[serde(default)]
pub commission: Commission,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Wallet {
#[serde(default)]
pub uuid: String,
#[serde(default)]
pub address: String,
#[serde(default)]
pub network: String,
#[serde(default)]
pub currency: String,
#[serde(default)]
pub order_id: String,
#[serde(default)]
pub url: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct MerchantBalance {
#[serde(default)]
pub currency: String,
#[serde(default)]
pub balance: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Balance {
#[serde(default)]
pub merchant: Vec<MerchantBalance>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct ReferralInfo {
#[serde(default)]
pub code: String,
#[serde(default)]
pub link: String,
#[serde(default)]
pub tier_bps: Vec<i64>,
#[serde(default)]
pub referred_count: i64,
#[serde(default)]
pub earnings_by_asset: HashMap<String, String>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct PayoutConvert {
#[serde(default)]
pub from_currency: String,
#[serde(default)]
pub to_currency: String,
#[serde(default)]
pub from_amount: String,
#[serde(default)]
pub rate: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Payout {
#[serde(default)]
pub uuid: String,
#[serde(default)]
pub order_id: String,
#[serde(default)]
pub amount: String,
#[serde(default)]
pub currency: String,
#[serde(default)]
pub network: String,
#[serde(default)]
pub address: String,
#[serde(default)]
pub txid: String,
#[serde(default)]
pub status: String,
#[serde(default)]
pub is_final: bool,
#[serde(default)]
pub approval_required: bool,
#[serde(default)]
pub source: String,
#[serde(default)]
pub created_at: String,
#[serde(default)]
pub updated_at: String,
#[serde(default)]
pub convert: Option<PayoutConvert>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct MassPayoutItem {
#[serde(default)]
pub order_id: String,
#[serde(default)]
pub success: bool,
#[serde(default)]
pub uuid: String,
#[serde(default)]
pub status: String,
#[serde(default)]
pub is_final: bool,
#[serde(default)]
pub approval_required: bool,
#[serde(default)]
pub message: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct MassPayoutResult {
#[serde(default)]
pub items: Vec<MassPayoutItem>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct PayoutList {
#[serde(default)]
pub items: Vec<Payout>,
#[serde(default)]
pub paginate: Paginate,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct PayoutCalculation {
#[serde(default)]
pub amount: String,
#[serde(default)]
pub currency: String,
#[serde(default)]
pub network: String,
#[serde(default)]
pub commission: String,
#[serde(default)]
pub merchant_amount: String,
#[serde(default)]
pub to_amount: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct ExchangeRate {
#[serde(default)]
pub from: String,
#[serde(default)]
pub to: String,
#[serde(default)]
pub course: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct CurrencyNetwork {
#[serde(default)]
pub network: String,
#[serde(default)]
pub kind: String,
#[serde(default)]
pub contract: String,
#[serde(default)]
pub min_confirmations: u32,
#[serde(default)]
pub available: bool,
#[serde(default)]
pub deposit_available: bool,
#[serde(default)]
pub payout_available: bool,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Currency {
#[serde(default)]
pub symbol: String,
#[serde(default)]
pub decimals: u32,
#[serde(default)]
pub networks: Vec<CurrencyNetwork>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct WebhookRegistration {
#[serde(default)]
pub endpoint_id: String,
#[serde(default)]
pub url: String,
#[serde(default)]
pub secret: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Delivery {
#[serde(default)]
pub id: String,
#[serde(default)]
pub url: String,
#[serde(default)]
pub event_type: String,
#[serde(default)]
pub status: String,
#[serde(default)]
pub attempts: i64,
#[serde(default)]
pub last_error: String,
#[serde(default)]
pub created_at: String,
#[serde(default)]
pub updated_at: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct AcceptedMethod {
pub currency: String,
pub network: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct AutoWithdrawRule {
#[serde(default)]
pub currency: String,
#[serde(default)]
pub network: String,
#[serde(default)]
pub address: String,
#[serde(default)]
pub min_minor: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct BatchSubmission {
#[serde(default)]
pub batch_id: String,
#[serde(default)]
pub kind: String,
#[serde(default)]
pub count: i64,
#[serde(default)]
pub status: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct BatchItem {
#[serde(default)]
pub idx: i64,
#[serde(default)]
pub status: String,
#[serde(default)]
pub order_id: String,
#[serde(default)]
pub result: serde_json::Value,
#[serde(default)]
pub error: serde_json::Value,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct BatchInfo {
#[serde(default)]
pub batch_id: String,
#[serde(default)]
pub kind: String,
#[serde(default)]
pub status: String,
#[serde(default)]
pub on_error: String,
#[serde(default)]
pub total: i64,
#[serde(default)]
pub succeeded: i64,
#[serde(default)]
pub failed: i64,
#[serde(default)]
pub created_at: String,
#[serde(default)]
pub updated_at: String,
#[serde(default)]
pub items: Vec<BatchItem>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct PaymentLinkPayment {
#[serde(default)]
pub uuid: String,
#[serde(default)]
pub status: String,
#[serde(default)]
pub amount: String,
#[serde(default)]
pub currency: String,
#[serde(default)]
pub created_at: String,
#[serde(default)]
pub order_id: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct PaymentLink {
#[serde(default)]
pub link_id: String,
#[serde(default)]
pub url: String,
#[serde(default)]
pub title: String,
#[serde(default)]
pub description: String,
#[serde(default)]
pub amount_mode: String,
#[serde(default)]
pub currency: String,
#[serde(default)]
pub active: bool,
#[serde(default)]
pub created_at: String,
#[serde(default)]
pub amount_fixed: String,
#[serde(default)]
pub amount_min: String,
#[serde(default)]
pub amount_max: String,
#[serde(default)]
pub pinned_currency: String,
#[serde(default)]
pub pinned_network: String,
#[serde(default)]
pub expires_at: String,
#[serde(default)]
pub payments: Vec<PaymentLinkPayment>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct SplitRule {
#[serde(default)]
pub rule_id: String,
#[serde(default)]
pub percent: f64,
#[serde(default)]
pub active: bool,
#[serde(default)]
pub note: String,
#[serde(default)]
pub address: String,
#[serde(default)]
pub network: String,
#[serde(default)]
pub merchant_id: String,
#[serde(default)]
pub reversible: bool,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct SplitConfig {
#[serde(default)]
pub refund_hold_hours: i64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Deserialize, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum PayoutLinkStatus {
#[default]
Funded,
Claiming,
Claimed,
Expired,
Cancelled,
#[serde(other)]
Unknown,
}
impl PayoutLinkStatus {
pub fn as_str(&self) -> &'static str {
match self {
Self::Funded => "funded",
Self::Claiming => "claiming",
Self::Claimed => "claimed",
Self::Expired => "expired",
Self::Cancelled => "cancelled",
Self::Unknown => "unknown",
}
}
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct PayoutLink {
#[serde(default)]
pub link_id: String,
#[serde(default)]
pub status: PayoutLinkStatus,
#[serde(default)]
pub amount: String,
#[serde(default)]
pub currency: String,
#[serde(default)]
pub network: String,
#[serde(default)]
pub title: String,
#[serde(default)]
pub note: String,
#[serde(default)]
pub expires_at: String,
#[serde(default)]
pub created_at: String,
#[serde(default)]
pub reference: String,
#[serde(default)]
pub email: String,
#[serde(default)]
pub claim_token: String,
#[serde(default)]
pub claim_url: String,
#[serde(default)]
pub payout_id: String,
#[serde(default)]
pub claim_address: String,
#[serde(default)]
pub batch_id: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct PayoutLinkBatchItem {
#[serde(default)]
pub ok: bool,
#[serde(default)]
pub link: Option<PayoutLink>,
#[serde(default)]
pub error: String,
#[serde(default)]
pub message: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct PayoutLinkBatch {
#[serde(default)]
pub created: i64,
#[serde(default)]
pub total: i64,
#[serde(default)]
pub results: Vec<PayoutLinkBatchItem>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct ClaimInfo {
#[serde(default)]
pub status: PayoutLinkStatus,
#[serde(default)]
pub amount: String,
#[serde(default)]
pub currency: String,
#[serde(default)]
pub network: String,
#[serde(default)]
pub title: String,
#[serde(default)]
pub note: String,
#[serde(default)]
pub expires_at: String,
#[serde(default)]
pub claimable: bool,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct ClaimResult {
#[serde(default)]
pub status: PayoutLinkStatus,
#[serde(default)]
pub payout_id: String,
#[serde(default)]
pub amount: String,
#[serde(default)]
pub currency: String,
#[serde(default)]
pub network: String,
#[serde(default)]
pub address: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ResolveAction {
Accept,
Refund,
}
impl ResolveAction {
pub fn as_str(&self) -> &'static str {
match self {
Self::Accept => "accept",
Self::Refund => "refund",
}
}
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Resolution {
#[serde(default)]
pub payment_uuid: String,
#[serde(default)]
pub order_id: String,
#[serde(default)]
pub resolution: String,
#[serde(default)]
pub amount_kept: String,
#[serde(default)]
pub currency: String,
#[serde(default)]
pub uuid: String,
#[serde(default)]
pub amount: String,
#[serde(default)]
pub address: String,
#[serde(default)]
pub status: String,
#[serde(default)]
pub is_final: bool,
}