//! QUIC v1 (RFC 9000) — transport layer over UDP, secured by TLS 1.3 keys
//! per RFC 9001. Includes RFC 9002 loss recovery + congestion control and
//! RFC 9221 unreliable datagram extension.
//!
//! This module is sans-I/O: the engine takes wire datagrams via `feed`
//! and produces wire datagrams via `pop`. The host wires it to a
//! `UdpSocket`.
//!
//! Phase 1 shipped the pure data-structure foundations: varint, packet
//! numbers, the frame codec, and the transport parameters. Phase 2 added
//! per-direction Initial + handshake keys plus the long/short header
//! codec and header-protection wrappers (RFC 9001 §5). Phase 3 added the
//! TLS-QUIC seam (`QuicHooks` trait, `EngineMode::Quic`).
//!
//! Phase 4 (this module) glues the previous three phases into the
//! [`QuicConnection`] state machine: per-level CRYPTO reassembly, ACK
//! emission, PADDING on the client's first datagram, PTO-driven Initial /
//! Handshake retransmission, in-process loopback handshake to completion.
//! Streams, full RFC 9002, Retry, key update, and DATAGRAM are deferred
//! to later phases per the master plan.

// QUIC v1 is shipped but pre-interop (several follow-ups remain before
// interop testing). A number of parsed-but-not-yet-consumed packet/header
// fields, ACK/version-negotiation codec helpers, ECN counters, PnSet query
// methods, and reserved RFC 9000 stream-state variants are intentionally
// retained for that pending work and for protocol-completeness/auditability
// against the RFCs. Rather than scatter per-item `#[allow]`s, dead_code is
// suppressed module-wide here; revisit and tighten once interop work lands.
#![allow(dead_code)]

pub(crate) mod ack;
pub(crate) mod cid;
pub(crate) mod client;
pub(crate) mod congestion;
pub(crate) mod connection;
pub(crate) mod crypto;
pub(crate) mod crypto_buf;
pub(crate) mod datagram;
pub(crate) mod endpoint;
pub(crate) mod frame;
pub(crate) mod loss;
pub(crate) mod path;
pub(crate) mod pkt;
pub(crate) mod pn;
pub(crate) mod retry;
pub(crate) mod server;
pub(crate) mod stream;
pub(crate) mod streams;
pub(crate) mod tls_glue;
pub mod transport_params;
pub(crate) mod varint;

pub use connection::{QuicConfig, QuicConnection, Role};
pub use stream::StreamId;
pub use transport_params::TransportParameters;
