pub mod client;
pub mod error;
pub mod auth;
pub mod crypto;
pub mod types;
#[cfg(feature = "official")]
pub mod official;
#[cfg(feature = "miniapp")]
pub mod miniapp;
pub use client::{Client, ClientBuilder};
pub use error::{WeChatError, Result};
pub use auth::AccessToken;
pub use types::*;
pub mod api {
pub const WECHAT_API_BASE: &str = "https://api.weixin.qq.com";
pub const WECHAT_FILE_API_BASE: &str = "https://file.api.weixin.qq.com";
}
pub struct WeChat {
core_client: Client,
}
impl WeChat {
pub fn builder() -> WeChatBuilder {
WeChatBuilder::new()
}
pub fn core(&self) -> &Client {
&self.core_client
}
#[cfg(feature = "official")]
pub fn official(&self) -> official::OfficialClient {
official::OfficialClient::new(self.core_client.clone())
}
#[cfg(feature = "miniapp")]
pub fn miniapp(&self) -> miniapp::MiniAppClient {
miniapp::MiniAppClient::new(self.core_client.clone())
}
}
pub struct WeChatBuilder {
client_builder: ClientBuilder,
}
impl WeChatBuilder {
pub fn new() -> Self {
Self {
client_builder: ClientBuilder::new(),
}
}
pub fn app_id<S: Into<String>>(mut self, app_id: S) -> Self {
self.client_builder = self.client_builder.app_id(app_id);
self
}
pub fn app_secret<S: Into<String>>(mut self, app_secret: S) -> Self {
self.client_builder = self.client_builder.app_secret(app_secret);
self
}
pub fn timeout(mut self, timeout: std::time::Duration) -> Self {
self.client_builder = self.client_builder.timeout(timeout);
self
}
pub fn build(self) -> Result<WeChat> {
let core_client = self.client_builder.build()?;
Ok(WeChat { core_client })
}
}
impl Default for WeChatBuilder {
fn default() -> Self {
Self::new()
}
}