use std::io; use std::net::TcpListener; use std::net::TcpStream; use std::thread; use rusty_http::Http; use rusty_http::Method; use rusty_http::Request; use rusty_http::Response; use rusty_http::StatusCode; fn say_hi(request: Request, response: Response) -> io::Result<()> { if request.body.is_empty() { response.status_code(StatusCode::BadRequest) .set_header("Content-Type", "text/html").flush()? .add_to_body("

400 Bad Request

") .add_to_body("

No message was delivered via body

").flush()?; return Ok(()); }; let content = format!("{{ \"message\": \"{}\" }}", request.body); response.json(content)?; Ok(()) } fn not_found(request: Request, response: Response) -> io::Result<()> { let content = format!("

Page '{}' could not been found

", request.uri); response.status_code(StatusCode::NotFound) .set_header("Content-Type", "text/html").flush()? .add_to_body("

404 Not Found

") .add_to_body(content).flush()?; Ok(()) } fn init_stream(stream: TcpStream) -> io::Result<()> { let (request, response) = Http::from(stream)?; match (&request.method, request.uri.as_str()) { (Method::Post, "/say-hi") => say_hi(request, response)?, _ => not_found(request, response)? } Ok(()) } fn main() -> io::Result<()> { let listener = TcpListener::bind("127.0.0.1:8080")?; for stream in listener.incoming().filter_map(Result::ok) { thread::spawn(|| init_stream(stream)); } Ok(()) }