From a0a11637f2c049788bf2c8b5f1b4d81d5bad4d55 Mon Sep 17 00:00:00 2001 From: dqnid Date: Sat, 23 Nov 2024 00:29:20 +0100 Subject: [PATCH] feat(request_parser): base code --- src/http.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/http.rs b/src/http.rs index 7ec9c5c..6b87cbf 100644 --- a/src/http.rs +++ b/src/http.rs @@ -1,3 +1,4 @@ +use std::collections::HashMap; use std::fs; use std::io::prelude::*; use std::net::TcpStream; @@ -7,6 +8,19 @@ pub struct ProcessedResponse { status: u8, } +struct HttpRequestLine { + method: String, + version: f32, + path: String, + params: HashMap, +} + +struct HttpRequest { + request: HttpRequestLine, + headers: HashMap, + body: String, +} + pub fn process_petition(stream: &mut TcpStream) -> std::io::Result { let mut buffer = [0; 1024]; @@ -36,3 +50,23 @@ pub fn process_petition(stream: &mut TcpStream) -> std::io::Result Result { + // TODO: study if better to use match + if let Some((heading, rest)) = request_raw.split_once("\n") { + // Process heading + // split heading with split_whitespace + // for (i, line) in request_raw.enumerate() { + // } + if let Some((headers, body)) = rest.split_once("\n\n") { + // Process headers and body + // split headers over ":" + } + } + + Err(400) +} + +fn parse_request_line(request_line: String) -> HttpRequestLine { + if let Some((method, path, version)) = request_line.split_whitespace() {} +}