Skip to main content

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::{ProxyProtocolClient, IncomingMessage, IdentityKeyPair};
10//!
11//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
12//! let mut client = ProxyProtocolClient::from_url("ws://localhost:8080".to_string());
13//! let mut incoming = client.connect(IdentityKeyPair::generate()).await?;
14//!
15//! tokio::spawn(async move {
16//!     while let Some(msg) = incoming.recv().await {
17//!         match msg {
18//!             IncomingMessage::Send { source, payload, .. } => {
19//!                 println!("Message from {:?}", source);
20//!             }
21//!             IncomingMessage::RendezvousInfo(code) => {
22//!                 println!("Your code: {}", code.as_str());
23//!             }
24//!             IncomingMessage::IdentityInfo { identity, .. } => {
25//!                 println!("Found peer: {:?}", identity.fingerprint());
26//!             }
27//!         }
28//!     }
29//! });
30//!
31//! client.request_rendezvous().await?;
32//! # Ok(())
33//! # }
34//! ```
35
36mod config;
37#[cfg(feature = "native-websocket")]
38mod protocol_client;
39
40pub use config::{IncomingMessage, ProxyClientConfig};
41#[cfg(feature = "native-websocket")]
42pub use protocol_client::ProxyProtocolClient;
43
44// Re-export key types from ap-proxy-protocol for ergonomics
45pub use ap_proxy_protocol::{
46    Challenge, ChallengeResponse, Identity, IdentityFingerprint, IdentityKeyPair, Messages,
47    ProxyError, RendezvousCode, SignatureAlgorithm,
48};