alux_http_hyper/
server.rs1use crate::{DRAIN, HyperConnections, HyperRoute};
2use alux_http::{HttpServerAlg, HttpServerSetup};
3use tokio::net::TcpListener;
4
5type HyperServerError = Box<dyn std::error::Error + Send + Sync>;
6
7#[derive(Debug, Default)]
9pub struct HyperServer;
10
11impl HttpServerAlg for HyperServer {
12 type Program = HyperRoute;
13 type Open = HyperConnections;
14 type Error = HyperServerError;
15
16 async fn open(&mut self, setup: HttpServerSetup<Self::Program>) -> Result<Self::Open, Self::Error> {
17 let (bind, route) = setup.into_parts();
18 let listener = TcpListener::bind(bind.address()).await?;
19
20 Ok(HyperConnections::serve(listener, route, DRAIN))
21 }
22
23 async fn close(&mut self, open: &mut Self::Open) -> Result<(), Self::Error> {
24 open.close().await;
25
26 Ok(())
27 }
28
29 async fn end(&mut self, open: &mut Self::Open) -> Result<(), Self::Error> {
30 open.end().await;
31
32 Ok(())
33 }
34}