Skip to main content

moq_native/
lib.rs

1//! Helper library for native MoQ applications.
2//!
3//! Establishes MoQ connections over:
4//! - WebTransport (HTTP/3)
5//! - Raw QUIC (with ALPN negotiation)
6//! - WebSocket (fallback via [web-transport-ws](https://crates.io/crates/web-transport-ws))
7//! - Iroh P2P (requires `iroh` feature)
8//!
9//! See [`Client`] for connecting to relays and [`Server`] for accepting connections.
10
11mod client;
12mod crypto;
13mod log;
14#[cfg(feature = "quinn")]
15mod quinn;
16mod server;
17#[cfg(feature = "websocket")]
18mod websocket;
19
20pub use client::*;
21pub use log::*;
22pub use server::*;
23#[cfg(feature = "websocket")]
24pub use websocket::*;
25
26// Re-export these crates.
27pub use moq_lite;
28pub use rustls;
29
30#[cfg(feature = "quinn")]
31pub use web_transport_quinn;
32
33#[cfg(feature = "quiche")]
34mod quiche;
35#[cfg(feature = "quiche")]
36pub use web_transport_quiche;
37
38#[cfg(feature = "iroh")]
39mod iroh;
40#[cfg(feature = "iroh")]
41pub use iroh::*;
42
43/// The QUIC backend to use for connections.
44#[derive(Clone, Debug, clap::ValueEnum, serde::Serialize, serde::Deserialize)]
45#[serde(rename_all = "lowercase")]
46pub enum QuicBackend {
47	/// [web-transport-quinn](https://crates.io/crates/web-transport-quinn)
48	#[cfg(feature = "quinn")]
49	Quinn,
50
51	/// [web-transport-quiche](https://crates.io/crates/web-transport-quiche)
52	#[cfg(feature = "quiche")]
53	Quiche,
54}