use std::collections::HashMap;
use crate::{
http::{HTTPRequest, Method, Version},
HandlerFunction,
};
#[derive(Debug)]
pub struct Router {
routes: HashMap<(Method, String, Version), HandlerFunction>,
}
impl Router {
pub fn new() -> Self {
Router {
routes: HashMap::new(),
}
}
pub fn add_route(
&mut self,
method: Method,
path: &str,
version: Version,
handler: HandlerFunction,
) {
self.routes
.insert((method, path.to_string(), version), handler);
}
pub fn route(&self, request: &HTTPRequest) -> Option<&HandlerFunction> {
self.routes.get(&(
request.method.clone(),
request.path.clone(),
request.version.clone(),
))
}
}