1#![warn(missing_docs)]
14
15pub mod bind;
16mod client;
17mod connect;
18mod crypto;
19mod error;
20#[cfg(any(feature = "quinn", feature = "noq", feature = "quiche", feature = "tcp"))]
21pub mod failover;
22#[cfg(feature = "jemalloc")]
23pub mod jemalloc;
24mod log;
25#[cfg(feature = "noq")]
26pub mod noq;
27pub mod quic;
28#[cfg(feature = "quinn")]
29pub mod quinn;
30mod reconnect;
31mod server;
32#[cfg(feature = "tcp")]
33pub mod tcp;
34pub mod tls;
35#[cfg(all(feature = "uds", unix))]
36pub mod unix;
37mod util;
38#[cfg(feature = "watch")]
39pub mod watch;
40#[cfg(feature = "websocket")]
41pub mod websocket;
42
43pub use client::{Client, ClientConfig};
46pub use connect::ConnectError;
47pub use error::{Error, Result};
48pub use log::Log;
49pub use reconnect::{Backoff, ConnectionStatsReader, Reconnect, Status};
50pub use server::{Request, Server, ServerConfig, Transport};
51
52pub(crate) fn spawn_session((session, driver): (moq_net::Session, moq_net::Driver)) -> moq_net::Session {
59 tokio::spawn(driver);
60 session
61}
62
63pub use moq_net;
65pub use rustls;
66
67#[cfg(feature = "watch")]
70pub use notify;
71
72#[cfg(target_os = "android")]
75pub use jni;
76
77#[cfg(feature = "quiche")]
78pub mod quiche;
79
80#[cfg(feature = "iroh")]
81pub mod iroh;
82
83#[derive(Clone, Debug, clap::ValueEnum, serde::Serialize, serde::Deserialize)]
85#[serde(rename_all = "lowercase")]
86#[non_exhaustive]
87pub enum QuicBackend {
88 #[cfg(feature = "quinn")]
90 Quinn,
91
92 #[cfg(feature = "quiche")]
94 Quiche,
95
96 #[cfg(feature = "noq")]
98 Noq,
99}
100
101fn default_quic_backend() -> QuicBackend {
102 #[cfg(feature = "quinn")]
103 {
104 QuicBackend::Quinn
105 }
106 #[cfg(all(feature = "noq", not(feature = "quinn")))]
107 {
108 QuicBackend::Noq
109 }
110 #[cfg(all(feature = "quiche", not(feature = "quinn"), not(feature = "noq")))]
111 {
112 QuicBackend::Quiche
113 }
114 #[cfg(all(not(feature = "quiche"), not(feature = "quinn"), not(feature = "noq")))]
115 panic!("no QUIC backend compiled; enable noq, quinn, or quiche feature");
116}
117
118#[cfg(test)]
119mod tests {
120 #[cfg(feature = "quinn")]
121 #[test]
122 fn quinn_is_the_default_backend() {
123 assert!(matches!(super::default_quic_backend(), super::QuicBackend::Quinn));
124 }
125}