+ "src/main.rs": "use hyper::{Body, Request, Response, Server, Method, StatusCode};\nuse hyper::service::{make_service_fn, service_fn};\nuse std::convert::Infallible;\nuse std::net::SocketAddr;\nuse std::fs;\n\nasync fn handle_request(req: Request<Body>) -> Result<Response<Body>, Infallible> {\n match (req.method(), req.uri().path()) {\n (&Method::GET, \"/\") => {\n let content = fs::read_to_string(\"index.html\")\n .unwrap_or_else(|_| \"Welcome to Rust HTTP Server\".to_string());\n Ok(Response::new(Body::from(content)))\n },\n (&Method::GET, \"/hello\") => {\n Ok(Response::new(Body::from(\"Hello from Rust HTTP Server!\")))\n },\n (&Method::GET, \"/files\") => {\n let files: Vec<String> = fs::read_dir(\".\")\n .unwrap()\n .filter_map(|entry| {\n entry.ok().and_then(|e| \n e.file_name().into_string().ok()\n )\n })\n .collect();\n \n let response = serde_json::to_string(&files).unwrap();\n \n Ok(Response::new(Body::from(response)))\n },\n _ => {\n let mut response = Response::new(Body::from(\"Not Found\"));\n *response.status_mut() = StatusCode::NOT_FOUND;\n Ok(response)\n }\n }\n}\n\n#[tokio::main]\nasync fn main() {\n let addr = SocketAddr::from(([127, 0, 0, 1], 8080));\n let make_svc = make_service_fn(|_conn| async {\n Ok::<_, Infallible>(service_fn(handle_request))\n });\n\n let server = Server::bind(&addr).serve(make_svc);\n\n println!(\"Server running on http://{}\", addr);\n\n if let Err(e) = server.await {\n eprintln!(\"server error: {}\", e);\n }\n}"
0 commit comments