use std::sync::Arc; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct PaymentConfig { #[serde(default = "default_currency")] pub currency: String, #[serde(default = "default_max_pagination")] pub max_pagination: u64, #[serde(default)] pub airwallex: AirwallexConfig, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] pub struct AirwallexConfig { #[serde(default)] pub base_url: String, #[serde(default)] pub client_id: String, #[serde(default)] pub api_key: String, #[serde(default)] pub webhook_secret: String, } pub type SharedPaymentConfig = Arc; impl Default for PaymentConfig { fn default() -> Self { Self { currency: default_currency(), max_pagination: default_max_pagination(), airwallex: AirwallexConfig::default(), } } } fn default_currency() -> String { "CNY".to_string() } fn default_max_pagination() -> u64 { 100 }