1use crate::config::PayConfig;
2use once_cell::sync::OnceCell;
3use std::sync::Arc;
4static CONFIG: OnceCell<Arc<PayConfig>> = OnceCell::new();
5pub struct Pay;
6impl Pay {
7 pub fn config(cfg: PayConfig) {
8 let _ = CONFIG.set(Arc::new(cfg));
9 }
10 fn cfg() -> Arc<PayConfig> {
11 CONFIG.get().expect("config not initialized").clone()
12 }
13 pub fn wechat() -> crate::wechat::client::WechatClient {
14 let cfg = Self::cfg();
15 let wx = cfg.wechat.clone().expect("wechat config missing");
16 crate::wechat::client::WechatClient::with_mode(wx, cfg.mode.clone())
17 }
18 pub fn alipay() -> crate::alipay::client::AlipayClient {
19 let cfg = Self::cfg();
20 let ali = cfg.alipay.clone().expect("alipay config missing");
21 crate::alipay::client::AlipayClient::with_mode(ali, cfg.mode.clone())
22 }
23 pub fn unionpay() -> crate::unionpay::client::UnionClient {
24 let cfg = Self::cfg();
25 let up = cfg.unionpay.clone().expect("unionpay config missing");
26 crate::unionpay::client::UnionClient::new(up)
27 }
28}