ringline_quic/lib.rs
1//! ringline-quic — QUIC protocol support via quinn-proto.
2//!
3//! This crate wraps [quinn-proto](https://docs.rs/quinn-proto)'s sans-IO QUIC
4//! state machine and exposes an event-based [`QuicEndpoint`] API.
5//!
6//! # Example
7//!
8//! ```rust,ignore
9//! use ringline_quic::{QuicConfig, QuicEndpoint, QuicEvent};
10//!
11//! // Feed incoming datagrams:
12//! quic.handle_datagram(Instant::now(), data, peer);
13//! while let Some(event) = quic.poll_event() {
14//! match event {
15//! QuicEvent::NewConnection(conn) => { /* ... */ }
16//! QuicEvent::StreamReadable { conn, stream } => {
17//! let mut buf = [0u8; 4096];
18//! let (n, fin) = quic.stream_recv(conn, stream, &mut buf)?;
19//! quic.stream_send(conn, stream, &buf[..n])?;
20//! }
21//! _ => {}
22//! }
23//! }
24//! // Drain outgoing packets:
25//! while let Some(pkt) = quic.poll_send() {
26//! match pkt.segment_size {
27//! Some(seg) => udp.send_to_gso(pkt.destination, &pkt.data, seg)?,
28//! None => udp.send_to(pkt.destination, &pkt.data)?,
29//! }
30//! }
31//! ```
32
33pub mod config;
34pub mod endpoint;
35pub mod error;
36pub mod event;
37
38pub use config::QuicConfig;
39pub use endpoint::{BatchGuard, Datagrams, OutgoingPacket, QuicEndpoint};
40pub use error::Error;
41pub use event::{QuicConnId, QuicEvent};
42
43// Re-export commonly used quinn-proto types for convenience.
44pub use quinn_proto::{
45 ConnectionStats, Dir, FrameStats, PathStats, ReadError, StreamId, UdpStats, VarInt, WriteError,
46};