wecom_transport/lib.rs
1//! Transport layer for the WeChat Work client — HTTP (reqwest).
2//!
3//! # Key types
4//!
5//! - [`Transport`] — unified handle holding `Arc<dyn TransportBackend>`. Accepts any
6//! [`TransportBackend`](traits::TransportBackend) via `From<T>` or `Transport::new()`.
7//! - [`TransportBackend`](traits::TransportBackend) — open trait for custom transport backends.
8//! - [`Endpoint`] — unified addressing carrying HTTP info for one call.
9//! - [`TransportRequest`] — builder-style request handle, `IntoFuture`-driven.
10//!
11//! # Implementing a custom backend
12//!
13//! Building blocks for custom [`TransportBackend`](traits::TransportBackend)
14//! implementations (protocol types, long-task polling, resumable download,
15//! request envelope) live under [`backend`] — kept out of the crate root so
16//! the top level stays focused on the consumer API.
17//!
18//! # Minimal example
19//!
20//! ```ignore
21//! let backend = wecom_transport::HttpTransportBackend::default();
22//! let transport = wecom_transport::Transport::from(backend)
23//! .with_header("Authorization", "Bearer x")?;
24//! let endpoint = Endpoint::new("https://api.example.com", "/cgi-bin/action");
25//! let result = transport.invoke(&endpoint, &serde_json::json!({})).await?;
26//! ```
27
28pub mod backend;
29mod builder;
30mod common;
31mod dispatch;
32mod http;
33mod http_client;
34mod macros;
35mod polling;
36pub mod telemetry;
37pub mod traits;
38mod transport;
39
40pub use builder::TransportBuilder;
41pub use common::error::*;
42pub use common::{
43 CatalogKey, Endpoint, EndpointCatalog, EndpointExt, Extension, Extensions, IntoCowEndpoint,
44 IntoCowValue, IntoHeaderName, IntoHeaderValue, MaskedHeaders, PollEndpoint, RequestOptions,
45 WireOptions,
46};
47pub use dispatch::{ExecuteOutput, PollCallback, PollEvent, TransportRequest};
48pub use http::{
49 EndpointHttpExt, GatewayRes, HttpEndpoint, HttpTransportBackend, PassthroughReq,
50 RequestEnvelope, ResponseEnvelope,
51};
52pub use http_client::{
53 ByteStream, ContentRange, HttpClient, HttpRequest, HttpRequestPayload, HttpResponse,
54 IntoRequestPayload,
55};
56pub use traits::{TransportBackend, TransportResponse};
57pub use transport::Transport;
58
59pub(crate) type Result<T> = std::result::Result<T, Error>;