From d5e687870377c36611d580ae3e0ffdd3a3ab74df Mon Sep 17 00:00:00 2001 From: YK Date: Sat, 11 May 2024 01:20:00 +0300 Subject: [PATCH] stage 7 refactoring --- src/main.rs | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/main.rs b/src/main.rs index 9f78ee7..d74b28b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -71,19 +71,18 @@ async fn process (mut stream: TcpStream, args: A) -> Result<()> { "/user-agent" => Response::TextPlain(headers.get("User-Agent").to_owned()), // p if let Some(echo) = p.strip_prefix("/echo/") => Response::TextPlain(echo), // a nicer way to do that, not available in stable yet p if p.starts_with("/echo/") => Response::TextPlain(p.trim_start_matches("/echo/").to_owned()), - p if p.starts_with("/files/") => { - if let Some(path) = &args.directory { - let path = path.join(p.trim_start_matches("/files/")); - let mut buf = vec![]; - if let Ok(mut f) = File::open(path).await { - let _ = f.read_to_end(&mut buf).await; - Response::OctetStream(buf) - } else { - Response::_404 - } - } else { - Response::_500 - } + p if p.starts_with("/files/") => 'a : { + let Some(path) = &args.directory else { + break 'a Response::_500; + }; + let path = path.join(p.trim_start_matches("/files/")); + let Ok(mut f) = File::open(path).await else { + break 'a Response::_404; + }; + + let mut buf = vec![]; + let _ = f.read_to_end(&mut buf).await; + Response::OctetStream(buf) }, _ => Response::_404, };