rust_pay_wf/
client.rs

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}