Skip to main content

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>;