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