h3/server/
mod.rs

1//! This module provides methods to create a http/3 Server.
2//!
3//! It allows to accept incoming requests, and send responses.
4//!
5//! # Examples
6//!
7//! ## Simple example
8//! ```rust
9//! async fn doc<C>(conn: C)
10//! where
11//! C: h3::quic::Connection<bytes::Bytes> + 'static,
12//! <C as h3::quic::OpenStreams<bytes::Bytes>>::BidiStream: Send + 'static
13//! {
14//!     let mut server_builder = h3::server::builder();
15//!     // Build the Connection
16//!     let mut h3_conn = server_builder.build(conn).await.unwrap();
17//!     loop {
18//!         // Accept incoming requests
19//!         match h3_conn.accept().await {
20//!             Ok(Some(resolver)) => {
21//!                 // spawn a new task to handle the request
22//!                 tokio::spawn(async move {
23//!                     // get the request
24//!                     let (req, mut stream) = resolver.resolve_request().await.unwrap();
25//!                     // build a http response
26//!                     let response = http::Response::builder().status(http::StatusCode::OK).body(()).unwrap();
27//!                     // send the response to the wire
28//!                     stream.send_response(response).await.unwrap();
29//!                     // send some date
30//!                     stream.send_data(bytes::Bytes::from("test")).await.unwrap();
31//!                     // finnish the stream
32//!                     stream.finish().await.unwrap();
33//!                 });
34//!             }
35//!             Ok(None) => {
36//!                 // break if no Request is accepted
37//!                 break;
38//!             }
39//!             Err(err) => {
40//!                 break;
41//!             }
42//!         }
43//!     }
44//! }
45//! ```
46//!
47//! ## File server
48//! A ready-to-use example of a file server is available [here](https://github.com/hyperium/h3/blob/master/examples/server.rs)
49
50mod builder;
51mod connection;
52mod request;
53mod stream;
54
55pub use builder::builder;
56pub use builder::Builder;
57pub use connection::Connection;
58pub use request::RequestResolver;
59pub use stream::RequestStream;