convert find_method_info function into a method

This commit is contained in:
Dietmar Maurer 2018-11-02 10:01:47 +01:00
parent 8741bc2079
commit 18671ca530
2 changed files with 19 additions and 16 deletions

View File

@ -33,6 +33,24 @@ pub struct MethodInfo<'a> {
pub subdirs: Option<&'a SubdirMap<'a>>,
}
impl<'a> MethodInfo<'a> {
pub fn find_method(&'a self, components: &[&str]) -> Option<&'a MethodInfo<'a>> {
if components.len() == 0 { return Some(self); };
let (dir, rest) = (components[0], &components[1..]);
if let Some(ref dirmap) = self.subdirs {
if let Some(info) = dirmap.get(&dir) {
return info.find_method(rest);
}
}
None
}
}
pub static METHOD_INFO_DEFAULTS: MethodInfo = MethodInfo {
get: None,
put: None,
@ -50,18 +68,3 @@ macro_rules! methodinfo {
};
}
}
pub fn find_method_info<'a>(root: &'a MethodInfo, components: &[&str]) -> Option<&'a MethodInfo<'a>> {
if components.len() == 0 { return Some(root); };
let (dir, rest) = (components[0], &components[1..]);
if let Some(ref dirmap) = root.subdirs {
if let Some(info) = dirmap.get(&dir) {
return find_method_info(info, rest);
}
}
None
}

View File

@ -154,7 +154,7 @@ fn handle_request(req: Request<Body>) -> Response<Body> {
http_error!(NOT_FOUND, format!("Unsupported format '{}'\n", format))
}
if let Some(info) = find_method_info(&API_ROOT, &components[2..]) {
if let Some(info) = API_ROOT.find_method(&components[2..]) {
println!("FOUND INFO");
let api_method_opt = match method {
&Method::GET => info.get,