diff --git a/actix-router/src/resource.rs b/actix-router/src/resource.rs index 66268f6a..d78c28cb 100644 --- a/actix-router/src/resource.rs +++ b/actix-router/src/resource.rs @@ -249,93 +249,7 @@ impl ResourceDef { /// Is the given path and parameters a match against this pattern. pub fn match_path(&self, path: &mut Path) -> bool { - match self.tp { - PatternType::Static(ref s) => { - if s == path.path() { - path.skip(path.len() as u16); - true - } else { - false - } - } - PatternType::Prefix(ref s) => { - let r_path = path.path(); - let len = if s == r_path { - s.len() - } else if r_path.starts_with(s) - && (s.ends_with('/') || r_path.split_at(s.len()).1.starts_with('/')) - { - if s.ends_with('/') { - s.len() - 1 - } else { - s.len() - } - } else { - return false; - }; - let r_path_len = r_path.len(); - path.skip(min(r_path_len, len) as u16); - true - } - PatternType::Dynamic(ref re, ref names, len) => { - let mut pos = 0; - let mut segments: [PathItem; MAX_DYNAMIC_SEGMENTS] = Default::default(); - - if let Some(captures) = re.captures(path.path()) { - for (no, name) in names.iter().enumerate() { - if let Some(m) = captures.name(&name) { - pos = m.end(); - segments[no] = PathItem::Segment(m.start() as u16, m.end() as u16); - } else { - log::error!( - "Dynamic path match but not all segments found: {}", - name - ); - return false; - } - } - } else { - return false; - } - for i in 0..names.len() { - path.add(names[i], mem::take(&mut segments[i])); - } - path.skip((pos + len) as u16); - true - } - PatternType::DynamicSet(ref re, ref params) => { - if let Some(idx) = re.matches(path.path()).into_iter().next() { - let (ref pattern, ref names, len) = params[idx]; - let mut pos = 0; - let mut segments: [PathItem; MAX_DYNAMIC_SEGMENTS] = Default::default(); - - if let Some(captures) = pattern.captures(path.path()) { - for (no, name) in names.iter().enumerate() { - if let Some(m) = captures.name(&name) { - pos = m.end(); - segments[no] = - PathItem::Segment(m.start() as u16, m.end() as u16); - } else { - log::error!( - "Dynamic path match but not all segments found: {}", - name - ); - return false; - } - } - } else { - return false; - } - for i in 0..names.len() { - path.add(names[i], mem::take(&mut segments[i])); - } - path.skip((pos + len) as u16); - true - } else { - false - } - } - } + self.match_path_checked(path, &|_, _| true, &Some(())) } /// Is the given path and parameters a match against this pattern?