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
11/// Default maximum number of concurrent QUIC streams (bidi and uni) per connection.
12pub(crate) const DEFAULT_MAX_STREAMS: u64 = 1024;
13
14mod client;
15mod crypto;
16mod log;
17#[cfg(feature = "noq")]
18mod noq;
19#[cfg(feature = "quinn")]
20mod quinn;
21mod reconnect;
22mod server;
23#[cfg(any(feature = "noq", feature = "quinn"))]
24mod tls;
25mod util;
26#[cfg(feature = "websocket")]
27mod websocket;
28
29pub use client::*;
30pub use log::*;
31pub use reconnect::*;
32pub use server::*;
33#[cfg(feature = "websocket")]
34pub use websocket::*;
35
36// Re-export these crates.
37pub use moq_lite;
38pub use rustls;
39
40#[cfg(feature = "noq")]
41pub use web_transport_noq;
42#[cfg(feature = "quinn")]
43pub use web_transport_quinn;
44
45#[cfg(feature = "quiche")]
46mod quiche;
47#[cfg(feature = "quiche")]
48pub use web_transport_quiche;
49
50#[cfg(feature = "iroh")]
51mod iroh;
52#[cfg(feature = "iroh")]
53pub use iroh::*;
54
55/// The QUIC backend to use for connections.
56#[derive(Clone, Debug, clap::ValueEnum, serde::Serialize, serde::Deserialize)]
57#[serde(rename_all = "lowercase")]
58#[non_exhaustive]
59pub enum QuicBackend {
60	/// [web-transport-quinn](https://crates.io/crates/web-transport-quinn)
61	#[cfg(feature = "quinn")]
62	Quinn,
63
64	/// [web-transport-quiche](https://crates.io/crates/web-transport-quiche)
65	#[cfg(feature = "quiche")]
66	Quiche,
67
68	/// [web-transport-noq](https://crates.io/crates/web-transport-noq)
69	#[cfg(feature = "noq")]
70	Noq,
71}