From 078965f189a131d7f8cd16fd05c3254eefffe971 Mon Sep 17 00:00:00 2001 From: dqnid Date: Sat, 23 Nov 2024 20:30:58 +0100 Subject: [PATCH] sync: request parse --- src/http.rs | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/src/http.rs b/src/http.rs index 6b87cbf..8c00e44 100644 --- a/src/http.rs +++ b/src/http.rs @@ -8,16 +8,23 @@ pub struct ProcessedResponse { status: u8, } +type QueryParams = HashMap; +type Headers = HashMap; + +struct HttpRequestQuery { + path: String, + params: QueryParams, +} + struct HttpRequestLine { method: String, version: f32, - path: String, - params: HashMap, + query: HttpRequestQuery, } struct HttpRequest { request: HttpRequestLine, - headers: HashMap, + headers: Headers, body: String, } @@ -67,6 +74,29 @@ fn parse_request(request_raw: String) -> Result { Err(400) } -fn parse_request_line(request_line: String) -> HttpRequestLine { - if let Some((method, path, version)) = request_line.split_whitespace() {} +fn parse_request_block(request_block: &str) -> Result { + let request_components: Vec<&str> = request_block.split(" ").collect(); + + if let Ok(array) = request_components.try_into() { + if let Ok(query) = parse_query(query) { + return Ok(HttpRequestLine { + method, + version, + query, + }); + } + } + Err(400) } + +fn parse_query(query: &str) -> Result { + if let Some((path, params)) = query.split_once("?") { + return Ok(HttpRequestQuery { + path: path.to_string(), + params: parse_query_params(params), + }); + }; + Err(400) +} + +fn parse_query_params(query: &str) -> QueryParams {}