#![warn(missing_docs)]
pub mod bind;
mod client;
mod connect;
mod crypto;
mod error;
#[cfg(feature = "jemalloc")]
pub mod jemalloc;
mod log;
#[cfg(feature = "noq")]
pub mod noq;
pub mod quic;
#[cfg(feature = "quinn")]
pub mod quinn;
mod reconnect;
mod server;
#[cfg(feature = "tcp")]
pub mod tcp;
pub mod tls;
#[cfg(all(feature = "uds", unix))]
pub mod unix;
mod util;
#[cfg(feature = "watch")]
pub mod watch;
#[cfg(feature = "websocket")]
pub mod websocket;
pub use client::{Client, ClientConfig};
pub use connect::ConnectError;
pub use error::{Error, Result};
pub use log::Log;
pub use reconnect::{Backoff, ConnectionStatsReader, Reconnect, Status};
pub use server::{Request, Server, ServerConfig, Transport};
pub(crate) fn spawn_session((session, driver): (moq_net::Session, moq_net::Driver)) -> moq_net::Session {
tokio::spawn(driver);
session
}
pub use moq_net;
pub use rustls;
#[cfg(feature = "watch")]
pub use notify;
#[cfg(target_os = "android")]
pub use jni;
#[cfg(feature = "quiche")]
pub mod quiche;
#[cfg(feature = "iroh")]
pub mod iroh;
#[derive(Clone, Debug, clap::ValueEnum, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "lowercase")]
#[non_exhaustive]
pub enum QuicBackend {
#[cfg(feature = "quinn")]
Quinn,
#[cfg(feature = "quiche")]
Quiche,
#[cfg(feature = "noq")]
Noq,
}
fn default_quic_backend() -> QuicBackend {
#[cfg(feature = "quinn")]
{
QuicBackend::Quinn
}
#[cfg(all(feature = "noq", not(feature = "quinn")))]
{
QuicBackend::Noq
}
#[cfg(all(feature = "quiche", not(feature = "quinn"), not(feature = "noq")))]
{
QuicBackend::Quiche
}
#[cfg(all(not(feature = "quiche"), not(feature = "quinn"), not(feature = "noq")))]
panic!("no QUIC backend compiled; enable noq, quinn, or quiche feature");
}
#[cfg(test)]
mod tests {
#[cfg(feature = "quinn")]
#[test]
fn quinn_is_the_default_backend() {
assert!(matches!(super::default_quic_backend(), super::QuicBackend::Quinn));
}
}