diff --git a/src/http/mod.rs b/src/http/mod.rs index b466aac..1e7a922 100644 --- a/src/http/mod.rs +++ b/src/http/mod.rs @@ -1,45 +1,9 @@ -use std::fs; -use std::io::prelude::*; -use std::net::TcpStream; - mod generators; mod parsers; +mod server; mod types; +use generators::*; use parsers::*; +use server::*; use types::*; - -pub fn process_petition(stream: &mut TcpStream) -> ProcessedResponse { - let mut buffer = [0; 1024]; // TODO: manage this size - let _amount = stream.read(&mut buffer); - let petition = String::from_utf8_lossy(&buffer[..]); - let petition = parse_request(&petition); - - match petition { - Ok(petition_parsed) => { - let response_status = "200 OK"; - - let response_content = fs::read_to_string("./routes/index.html").unwrap(); - - let response: ProcessedResponse = ProcessedResponse { - data: format!( - "HTTP/1.1 {}\r\nContent-Length: {}\r\n\r\n{}", - response_status, - response_content.len(), - response_content - ), - status: 200, - }; - - response - } - Err(error) => { - let response: ProcessedResponse = ProcessedResponse { - data: format!("HTTP/1.1 {}\r\nContent-Length: 0\r\n\r\n", error), - status: error, - }; - - response - } - } -} diff --git a/src/http/server.rs b/src/http/server.rs index 3deaf81..fe4f287 100644 --- a/src/http/server.rs +++ b/src/http/server.rs @@ -2,53 +2,57 @@ use std::fs; use std::io::prelude::*; use std::net::TcpStream; -mod generators; -mod parsers; -mod types; +use super::*; -use parsers::*; -use types::*; - -struct HTTPServer { - config: ; - routes: ; +struct HTTPServer<'a> { + config: HttpAppConfig, + routes: Vec>, } -impl HTTPServer { +impl HTTPServer<'_> { + fn get_route(&self, path: &str) -> Option<&HttpAppRoute> { + self.routes.first() // TODO: search the real one + } -fn process_petition(stream: &mut TcpStream) -> ProcessedResponse { - let mut buffer = [0; 1024]; // TODO: manage this size - let _amount = stream.read(&mut buffer); - let petition = String::from_utf8_lossy(&buffer[..]); - let petition = parse_request(&petition); + fn process_petition(&self, stream: &mut TcpStream) -> ProcessedResponse { + let mut buffer = [0; 1024]; // TODO: manage this size + let _amount = stream.read(&mut buffer); + let petition = String::from_utf8_lossy(&buffer[..]); + let petition = parse_request(&petition); - match petition { - Ok(petition_parsed) => { - let response_status = "200 OK"; + match petition { + Ok(petition_parsed) => { + let response_status = "200 OK"; - let response_content = fs::read_to_string("./routes/index.html").unwrap(); + let response_content = fs::read_to_string("./routes/index.html").unwrap(); + let route = self.get_route(petition_parsed.request.query.path); - let response: ProcessedResponse = ProcessedResponse { - data: format!( - "HTTP/1.1 {}\r\nContent-Length: {}\r\n\r\n{}", - response_status, - response_content.len(), - response_content - ), - status: 200, - }; + if let Some(route) = route { + // TODO: call function and generate response + } else { + // TODO: return not found + } - response - } - Err(error) => { - let response: ProcessedResponse = ProcessedResponse { - data: format!("HTTP/1.1 {}\r\nContent-Length: 0\r\n\r\n", error), - status: error, - }; + let response: ProcessedResponse = ProcessedResponse { + data: format!( + "HTTP/1.1 {}\r\nContent-Length: {}\r\n\r\n{}", + response_status, + response_content.len(), + response_content + ), + status: 200, + }; - response + response + } + Err(error) => { + let response: ProcessedResponse = ProcessedResponse { + data: format!("HTTP/1.1 {}\r\nContent-Length: 0\r\n\r\n", error), + status: error, + }; + + response + } } } } - -} diff --git a/src/lib.rs b/src/lib.rs index 8b9fd2e..7aa4b75 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -21,6 +21,9 @@ fn principal() { } } +// NOTE: example function: +// let response_content = fs::read_to_string("./routes/index.html").unwrap(); + pub fn add(left: u64, right: u64) -> u64 { left + right }