use async_std::net::{TcpListener, TcpStream}; use async_std::prelude::*; use async_std::task; use http_types::{Response, StatusCode}; #[async_std::main] async fn main() -> http_types::Result<()> { // Open up a TCP connection and create a URL. let listener = TcpListener::bind(("127.0.0.1", 8080)).await?; let addr = format!("http://{}", listener.local_addr()?); println!("listening on {}", addr); // For each incoming TCP connection, spawn a task and call `accept`. let mut incoming = listener.incoming(); while let Some(stream) = incoming.next().await { let stream = stream?; task::spawn(async { if let Err(err) = accept(stream).await { eprintln!("{}", err); } }); } Ok(()) } // Take a TCP stream, and convert it into sequential HTTP request / response pairs. async fn accept(stream: TcpStream) -> http_types::Result<()> { println!("starting new connection from {}", stream.peer_addr()?); async_h1::accept(stream.clone(), |_req| async move { let mut res = Response::new(StatusCode::Ok); res.insert_header("Content-Type", "text/plain"); res.set_body("Hello world"); Ok(res) }) .await?; Ok(()) }