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;