1pub mod client;
22pub mod error;
23pub mod auth;
24pub mod crypto;
25pub mod types;
26
27#[cfg(feature = "official")]
29pub mod official;
30
31#[cfg(feature = "miniapp")]
32pub mod miniapp;
33
34pub use client::{Client, ClientBuilder};
36pub use error::{WeChatError, Result};
37pub use auth::AccessToken;
38pub use types::*;
39
40pub mod api {
42 pub const WECHAT_API_BASE: &str = "https://api.weixin.qq.com";
43 pub const WECHAT_FILE_API_BASE: &str = "https://file.api.weixin.qq.com";
44}
45
46pub struct WeChat {
48 core_client: Client,
49}
50
51impl WeChat {
52 pub fn builder() -> WeChatBuilder {
54 WeChatBuilder::new()
55 }
56
57 pub fn core(&self) -> &Client {
59 &self.core_client
60 }
61
62 #[cfg(feature = "official")]
64 pub fn official(&self) -> official::OfficialClient {
65 official::OfficialClient::new(self.core_client.clone())
66 }
67
68 #[cfg(feature = "miniapp")]
70 pub fn miniapp(&self) -> miniapp::MiniAppClient {
71 miniapp::MiniAppClient::new(self.core_client.clone())
72 }
73}
74
75pub struct WeChatBuilder {
77 client_builder: ClientBuilder,
78}
79
80impl WeChatBuilder {
81 pub fn new() -> Self {
82 Self {
83 client_builder: ClientBuilder::new(),
84 }
85 }
86
87 pub fn app_id<S: Into<String>>(mut self, app_id: S) -> Self {
88 self.client_builder = self.client_builder.app_id(app_id);
89 self
90 }
91
92 pub fn app_secret<S: Into<String>>(mut self, app_secret: S) -> Self {
93 self.client_builder = self.client_builder.app_secret(app_secret);
94 self
95 }
96
97 pub fn timeout(mut self, timeout: std::time::Duration) -> Self {
98 self.client_builder = self.client_builder.timeout(timeout);
99 self
100 }
101
102 pub fn build(self) -> Result<WeChat> {
103 let core_client = self.client_builder.build()?;
104 Ok(WeChat { core_client })
105 }
106}
107
108impl Default for WeChatBuilder {
109 fn default() -> Self {
110 Self::new()
111 }
112}