diff --git a/router/CHANGES.txt b/router/CHANGES.txt index e55b3be8..28482266 100644 --- a/router/CHANGES.txt +++ b/router/CHANGES.txt @@ -1,5 +1,9 @@ # Changes +## [0.1.1] - 2019-04-03 + +* Get dynamic segment by name instead of iterator. + ## [0.1.0] - 2019-03-09 * Initial release diff --git a/router/Cargo.toml b/router/Cargo.toml index 9658bd93..53902746 100644 --- a/router/Cargo.toml +++ b/router/Cargo.toml @@ -1,16 +1,16 @@ [package] name = "actix-router" -version = "0.1.0" +version = "0.1.1" authors = ["Nikolay Kim "] description = "Path router" keywords = ["actix"] homepage = "https://actix.rs" repository = "https://github.com/actix/actix-net.git" -documentation = "https://actix.rs/api/actix-net/stable/actix_router/" +documentation = "https://docs.rs/actix-router/" license = "MIT/Apache-2.0" exclude = [".gitignore", ".travis.yml", ".cargo/config", "appveyor.yml"] edition = "2018" -workspace = "../" +workspace = ".." [lib] name = "actix_router" @@ -23,7 +23,8 @@ default = ["http"] bytes = "0.4" regex = "1.0" serde = "1.0.80" -string = "0.1.3" +string = "0.2.0" +log = "0.4" http = { version="0.1.14", optional=true } [dev-dependencies] diff --git a/router/src/resource.rs b/router/src/resource.rs index ada5da52..e5cdfc83 100644 --- a/router/src/resource.rs +++ b/router/src/resource.rs @@ -196,18 +196,17 @@ impl ResourceDef { [PathItem::Static(""); MAX_DYNAMIC_SEGMENTS]; if let Some(captures) = re.captures(path.path()) { - let mut passed = false; - - for capture in captures.iter() { - if let Some(ref m) = capture { - if !passed { - passed = true; - continue; - } - - segments[idx] = PathItem::Segment(m.start() as u16, m.end() as u16); + for (no, name) in names.iter().enumerate() { + if let Some(m) = captures.name(&name) { idx += 1; 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 + ); + false; } } } else {