aboutsummaryrefslogtreecommitdiff
path: root/src/router.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/router.rs')
-rw-r--r--src/router.rs61
1 files changed, 40 insertions, 21 deletions
diff --git a/src/router.rs b/src/router.rs
index 1d8e6f2..cbbc64a 100644
--- a/src/router.rs
+++ b/src/router.rs
@@ -29,34 +29,53 @@ impl Router {
// Add a route to the router
pub fn route(&mut self, method: Method, handler: Handler) -> &mut Self {
use Method::*;
-
- let method_string = match &method {
- Get(s) | Post(s) | Put(s) => s,
- };
-
- let re = build_regex_from_path(method_string.as_str());
- let meth = Get(re.to_string());
- dbg!(&meth);
- self.routes.insert(meth, handler);
+ match method {
+ Get(route) => {
+ let re = build_regex_from_path(&route);
+ let meth = Get(re.to_string());
+ dbg!(&meth);
+ self.routes.insert(meth, handler);
+ }
+ Post(route) => {
+ let re = build_regex_from_path(&route);
+ let meth = Post(re.to_string());
+ dbg!(&meth);
+ self.routes.insert(meth, handler);
+ }
+ Put(_) => todo!(),
+ }
self
}
// Handle incoming requests
pub fn handle(&self, request: &Request, ctx: Option<&HashMap<String, String>>) -> Response {
use Method::*;
- let method_string = match &request.method {
- Get(s) | Post(s) | Put(s) => s,
- };
- for (method, handler) in self.routes() {
- let route_method = match method {
- Get(s) | Post(s) | Put(s) => s.as_str(),
- };
- let re = Regex::new(route_method).unwrap();
- dbg!(&re, method_string);
- if re.is_match(method_string) {
- return handler(request, ctx);
+ match &request.method {
+ Get(request_method) => {
+ for (method, handler) in self.routes() {
+ if let Get(method_string) = method {
+ let re = Regex::new(method_string).unwrap();
+ dbg!(&re, request_method);
+ if re.is_match(request_method) {
+ return handler(request, ctx);
+ }
+ }
+ }
+ Response::new("1.1".to_string(), StatusCode::NotFound, None, None).into()
+ }
+ Post(request_method) => {
+ for (method, handler) in self.routes() {
+ if let Post(method_string) = method {
+ let re = Regex::new(method_string).unwrap();
+ dbg!(&re, request_method);
+ if re.is_match(request_method) {
+ return handler(request, ctx);
+ }
+ }
+ }
+ Response::new("1.1".to_string(), StatusCode::NotFound, None, None).into()
}
+ Put(_) => todo!(),
}
- Response::new("1.1".to_string(), StatusCode::NotFound, None, None).into()
}
}