stage 3 attempt 2

This commit is contained in:
YK 2024-05-10 21:07:14 +03:00
parent 37dd2cfd5a
commit f28811942b

View File

@ -1,4 +1,4 @@
use std::{ fmt::Display, io::{Read, Write}, net::TcpListener }; use std::{ fmt::Display, io::{BufRead, BufReader, Read, Write}, net::TcpListener };
use anyhow::Result; use anyhow::Result;
use thiserror::Error; use thiserror::Error;
@ -14,14 +14,16 @@ fn main() -> Result<()> {
for stream in listener.incoming() { for stream in listener.incoming() {
match stream { match stream {
Ok(mut stream) => { Ok(mut stream) => {
let mut buf = String::new(); let buf_reader = BufReader::new(&mut stream);
let _read = stream.read_to_string(&mut buf);
let mut data = buf.split("\r\n"); let mut data = buf_reader
.lines()
.map(|result| result.unwrap())
.take_while(|line| !line.is_empty());
let _start @ (_method, path, _ver) = { let (_method, path, _ver) = {
let start_line = data.next().ok_or(E::InvalidRequest)?; // should be 500; let start_line = data.next().ok_or(E::InvalidRequest)?; // should be 500;
let mut parts = start_line.split_whitespace(); let mut parts = start_line.split_whitespace().map(ToOwned::to_owned);
let method = parts.next().ok_or(E::InvalidRequest)?; let method = parts.next().ok_or(E::InvalidRequest)?;
let path = parts.next().ok_or(E::InvalidRequest)?; let path = parts.next().ok_or(E::InvalidRequest)?;
let ver = parts.next().ok_or(E::InvalidRequest)?; let ver = parts.next().ok_or(E::InvalidRequest)?;
@ -29,7 +31,7 @@ fn main() -> Result<()> {
(method, path, ver) (method, path, ver)
}; };
let code = match path { let code = match path.as_str() {
"/" => "200 OK", "/" => "200 OK",
_ => "404 Not Found", _ => "404 Not Found",
}; };