diff --git a/core/http/src/handling/methods.rs b/core/http/src/handling/methods.rs index 998cfa563ad93ae2cf529c342e21b31557324722..5ca6211081ea5dd26aa3bf0fbb6f74166af50b25 100644 --- a/core/http/src/handling/methods.rs +++ b/core/http/src/handling/methods.rs @@ -1,6 +1,6 @@ use std::{fmt::Display, str::FromStr}; -#[derive(PartialEq, Eq, Clone, Debug, Copy)] +#[derive(PartialEq, Eq, Clone, Debug, Copy, PartialOrd, Ord)] pub enum Method { Get, Head, diff --git a/core/http/src/handling/request.rs b/core/http/src/handling/request.rs index ba1cf3772ef46ea92fedb765a2934fee6fc19b2e..adfb6b82dbc82fc647d2cdcfcd5f44502ee2a290 100644 --- a/core/http/src/handling/request.rs +++ b/core/http/src/handling/request.rs @@ -1,4 +1,4 @@ -use std::net::SocketAddr; +// use std::net::SocketAddr; use super::{methods::Method, routes::Uri}; @@ -11,12 +11,12 @@ pub struct Request<'a> { // pub connection: ConnectionMeta, } -struct ConnectionMeta { - remote: Option<SocketAddr>, - // certificates -} +// struct ConnectionMeta { +// remote: Option<SocketAddr>, +// // certificates +// } -#[derive(Clone, Debug, Copy)] +#[derive(Clone, Debug, Copy, PartialEq, Eq, PartialOrd, Ord)] pub enum MediaType { Json, Plain, diff --git a/core/http/src/setup.rs b/core/http/src/setup.rs index dfdb496121f28aed4b1d9de57fa0c1c756a1ba28..a50e7d1caf4a052c6f5648ca445e0ff6cb8368f3 100644 --- a/core/http/src/setup.rs +++ b/core/http/src/setup.rs @@ -1,8 +1,6 @@ -use std::{ - thread::available_parallelism, process::exit, -}; +use std::thread::available_parallelism; -use tokio::{net::TcpListener, signal::unix::{SignalKind, signal}, runtime, select}; +use tokio::{net::TcpListener, signal::unix::{SignalKind, signal}, select}; use crate::{ handlers::handlers::handle_connection, @@ -21,7 +19,8 @@ pub struct Config { } impl<'a> Config { - pub fn mount(mut self, mountpoint: Uri<'static>, routes: Vec<Route<'static>>) -> Config { + pub fn mount(mut self, mountpoint: Uri<'static>, mut routes: Vec<Route<'static>>) -> Config { + routes.sort_by(|a, b| a.rank.cmp(&b.rank)); let mut mount_message = format!(" >> \x1b[35m{}\x1b[0m\n", mountpoint); for (index, route) in routes.iter().enumerate() { let indent_sign; diff --git a/site/src/main.rs b/site/src/main.rs index fc87c26d2bea8668454effc7e5640ea17c653f98..e58195ab7eea5eaa9a5ed37016e07f18f73d9550 100644 --- a/site/src/main.rs +++ b/site/src/main.rs @@ -8,6 +8,15 @@ use http::handling::{ routes::{Data, Route}, }; +fn handle_static_hi(request: Request<'_>, data: Data) -> Outcome<Response, Status, Data> { + // Outcome::Success(Response { headers: vec![ + // format!("Content-Length: 4"), + // format!("Content-Type: text/plain") + // ], status: Some(Status::Ok), body: Box::new("jkl;") }) + Outcome::Forward(data) +} + + fn handler(request: Request<'_>, _data: Data) -> Outcome<Response, Status, Data> { let response = fileserver(request.uri.strip_prefix("static/").unwrap()); let response = match response { @@ -60,7 +69,7 @@ async fn main() { name: Some("file_server"), uri: "static/<path..>", method: Method::Get, - rank: 0, + rank: 1, }; let post_test = Route { @@ -72,7 +81,16 @@ async fn main() { rank: 0, }; + let static_hi = Route { + format: None, + handler: handle_static_hi, + name: Some("Handle_Static_hi"), + uri: "static/hi", + method: Method::Get, + rank: 0 + }; + http::build("127.0.0.1:8000").await - .mount("/", vec![fileserver, post_test]) + .mount("/", vec![fileserver, post_test, static_hi]) .launch().await; } diff --git a/site/static/hi b/site/static/hi new file mode 100644 index 0000000000000000000000000000000000000000..8bd6648ed130ac9ece0f89cd9a8fbbfd2608427a --- /dev/null +++ b/site/static/hi @@ -0,0 +1 @@ +asdf