Skip to main content

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};