ap_proxy_client/lib.rs
1//! Client library for connecting to an ap-proxy WebSocket server.
2//!
3//! This crate provides [`ProxyProtocolClient`] for connecting to a proxy server,
4//! authenticating, and sending/receiving messages.
5//!
6//! # Example
7//!
8//! ```no_run
9//! use ap_proxy_client::{ProxyClientConfig, ProxyProtocolClient, IncomingMessage};
10//!
11//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
12//! let config = ProxyClientConfig {
13//! proxy_url: "ws://localhost:8080".to_string(),
14//! identity_keypair: None,
15//! };
16//!
17//! let mut client = ProxyProtocolClient::new(config);
18//! let mut incoming = client.connect().await?;
19//!
20//! tokio::spawn(async move {
21//! while let Some(msg) = incoming.recv().await {
22//! match msg {
23//! IncomingMessage::Send { source, payload, .. } => {
24//! println!("Message from {:?}", source);
25//! }
26//! IncomingMessage::RendezvousInfo(code) => {
27//! println!("Your code: {}", code.as_str());
28//! }
29//! IncomingMessage::IdentityInfo { identity, .. } => {
30//! println!("Found peer: {:?}", identity.fingerprint());
31//! }
32//! }
33//! }
34//! });
35//!
36//! client.request_rendezvous().await?;
37//! # Ok(())
38//! # }
39//! ```
40
41mod config;
42#[cfg(feature = "native-websocket")]
43mod protocol_client;
44
45pub use config::{IncomingMessage, ProxyClientConfig};
46#[cfg(feature = "native-websocket")]
47pub use protocol_client::ProxyProtocolClient;
48
49// Re-export key types from ap-proxy-protocol for ergonomics
50pub use ap_proxy_protocol::{
51 Challenge, ChallengeResponse, Identity, IdentityFingerprint, IdentityKeyPair, Messages,
52 ProxyError, RendezvousCode, SignatureAlgorithm,
53};