Skip to main content

tuwunel_router/serve/
plain.rs

1use std::net::{SocketAddr, TcpListener};
2
3use axum::Router;
4use axum_server::{Handle, from_tcp};
5use futures::{FutureExt, future::BoxFuture};
6use tuwunel_core::Result;
7
8pub(super) fn serve<'a>(
9	router: &Router,
10	handle: &Handle<SocketAddr>,
11	listeners: impl Iterator<Item = TcpListener>,
12) -> Result<Vec<BoxFuture<'a, Result<(), std::io::Error>>>> {
13	let router = router
14		.clone()
15		.into_make_service_with_connect_info::<SocketAddr>();
16
17	listeners
18		.map(|listener| {
19			let acceptor = from_tcp(listener)?
20				.handle(handle.clone())
21				.serve(router.clone())
22				.boxed();
23
24			Ok(acceptor)
25		})
26		.collect()
27}