weixin_agent/lib.rs
1//! `weixin-agent` — Pure protocol SDK for the Weixin iLink Bot API.
2//!
3//! This crate handles HTTP API calls, CDN upload/download, AES encryption,
4//! long-poll monitoring, and message parsing. It does **not** manage state
5//! persistence — that is the caller's responsibility.
6//!
7//! # Quick start
8//!
9//! ```rust,no_run
10//! use weixin_agent::{WeixinClient, WeixinConfig, MessageHandler, MessageContext, Result};
11//!
12//! struct EchoBot;
13//!
14//! #[async_trait::async_trait]
15//! impl MessageHandler for EchoBot {
16//! async fn on_message(&self, ctx: &MessageContext) -> Result<()> {
17//! if let Some(text) = &ctx.body {
18//! ctx.reply_text(text).await?;
19//! }
20//! Ok(())
21//! }
22//! }
23//! ```
24
25#![warn(clippy::pedantic)]
26#![allow(clippy::module_name_repetitions)]
27#![allow(clippy::must_use_candidate)]
28#![allow(clippy::missing_errors_doc)]
29
30pub mod api;
31pub mod cdn;
32pub mod config;
33pub mod error;
34pub mod media;
35pub mod messaging;
36pub mod monitor;
37pub mod qr_login;
38pub mod types;
39pub mod util;
40
41mod client;
42
43// ── Public re-exports ───────────────────────────────────────────────
44
45pub use client::{WeixinClient, WeixinClientBuilder};
46pub use config::{WeixinConfig, WeixinConfigBuilder};
47pub use error::{Error, Result};
48pub use messaging::inbound::{
49 ContextTokenStore, MediaInfo, MessageContext, RefMessageInfo, SendResult,
50};
51pub use monitor::poll_loop::MessageHandler;
52pub use qr_login::login::{LoginStatus, QrLoginApi, QrLoginSession, StandaloneQrLogin};
53pub use types::{
54 CdnMedia, MediaType, MessageItemType, MessageState, MessageType, TypingStatus, UploadMediaType,
55};