From 4f9d09b58ae81e4e6144b85ce36ba424e319b779 Mon Sep 17 00:00:00 2001 From: omagdy7 Date: Mon, 3 Jun 2024 20:40:54 +0300 Subject: codecrafters submit [skip ci] --- src/request.rs | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/request.rs (limited to 'src/request.rs') diff --git a/src/request.rs b/src/request.rs new file mode 100644 index 0000000..8728e79 --- /dev/null +++ b/src/request.rs @@ -0,0 +1,43 @@ +use crate::http_types::*; + +#[derive(Debug)] +pub struct Request { + pub method: HTTPMethod, + pub headers: Option, + body: Option, +} + +impl Request { + fn new(method: HTTPMethod, headers: Headers, body: String) -> Self { + let headers = if headers.0.len() == 0 { + None + } else { + Some(headers) + }; + let body = if body.is_empty() { None } else { Some(body) }; + Request { + method, + headers, + body, + } + } +} + +impl From<&str> for Request { + fn from(val: &str) -> Self { + let request: Vec<&str> = val.split("\r\n").collect(); + match &request[..] { + [request_line, headers @ .., body] => { + let (method, headers, body) = ( + HTTPMethod::from(*request_line), + Headers::from(headers), + body.to_string(), + ); + Request::new(method, headers, body) + } + _ => { + unreachable!(); + } + } + } +} -- cgit v1.2.3