remove usage of array::IntoIter

This commit is contained in:
ibraheemdev 2021-06-04 12:26:48 -04:00
parent 7b365dc657
commit 50a3013819
1 changed files with 24 additions and 17 deletions

View File

@ -1,4 +1,3 @@
use std::array::IntoIter;
use std::cmp::min; use std::cmp::min;
use std::collections::HashMap; use std::collections::HashMap;
use std::hash::{Hash, Hasher}; use std::hash::{Hash, Hasher};
@ -275,14 +274,15 @@ impl ResourceDef {
PatternType::Dynamic(ref re, ref names, len) => { PatternType::Dynamic(ref re, ref names, len) => {
let mut idx = 0; let mut idx = 0;
let mut pos = 0; let mut pos = 0;
let mut segments: [PathItem; MAX_DYNAMIC_SEGMENTS] = Default::default(); let mut segments: [Option<PathItem>; MAX_DYNAMIC_SEGMENTS] = Default::default();
if let Some(captures) = re.captures(path.path()) { if let Some(captures) = re.captures(path.path()) {
for (no, name) in names.iter().enumerate() { for (no, name) in names.iter().enumerate() {
if let Some(m) = captures.name(&name) { if let Some(m) = captures.name(&name) {
idx += 1; idx += 1;
pos = m.end(); pos = m.end();
segments[no] = PathItem::Segment(m.start() as u16, m.end() as u16); segments[no] =
Some(PathItem::Segment(m.start() as u16, m.end() as u16));
} else { } else {
log::error!( log::error!(
"Dynamic path match but not all segments found: {}", "Dynamic path match but not all segments found: {}",
@ -294,11 +294,12 @@ impl ResourceDef {
} else { } else {
return false; return false;
} }
for (idx, segment) in IntoIter::new(segments) for (idx, segment) in segments
.iter_mut()
.enumerate() .enumerate()
.take_while(|(i, _)| *i != idx) .take_while(|(i, _)| *i != idx)
{ {
path.add(names[idx], segment); path.add(names[idx], segment.take().unwrap());
} }
path.skip((pos + len) as u16); path.skip((pos + len) as u16);
true true
@ -308,7 +309,8 @@ impl ResourceDef {
let (ref pattern, ref names, len) = params[idx]; let (ref pattern, ref names, len) = params[idx];
let mut idx = 0; let mut idx = 0;
let mut pos = 0; let mut pos = 0;
let mut segments: [PathItem; MAX_DYNAMIC_SEGMENTS] = Default::default(); let mut segments: [Option<PathItem>; MAX_DYNAMIC_SEGMENTS] =
Default::default();
if let Some(captures) = pattern.captures(path.path()) { if let Some(captures) = pattern.captures(path.path()) {
for (no, name) in names.iter().enumerate() { for (no, name) in names.iter().enumerate() {
@ -316,7 +318,7 @@ impl ResourceDef {
idx += 1; idx += 1;
pos = m.end(); pos = m.end();
segments[no] = segments[no] =
PathItem::Segment(m.start() as u16, m.end() as u16); Some(PathItem::Segment(m.start() as u16, m.end() as u16));
} else { } else {
log::error!( log::error!(
"Dynamic path match but not all segments found: {}", "Dynamic path match but not all segments found: {}",
@ -328,11 +330,12 @@ impl ResourceDef {
} else { } else {
return false; return false;
} }
for (idx, segment) in IntoIter::new(segments) for (idx, segment) in segments
.iter_mut()
.enumerate() .enumerate()
.take_while(|(i, _)| *i != idx) .take_while(|(i, _)| *i != idx)
{ {
path.add(names[idx], segment); path.add(names[idx], segment.take().unwrap());
} }
path.skip((pos + len) as u16); path.skip((pos + len) as u16);
true true
@ -392,14 +395,15 @@ impl ResourceDef {
PatternType::Dynamic(ref re, ref names, len) => { PatternType::Dynamic(ref re, ref names, len) => {
let mut idx = 0; let mut idx = 0;
let mut pos = 0; let mut pos = 0;
let mut segments: [PathItem; MAX_DYNAMIC_SEGMENTS] = Default::default(); let mut segments: [Option<PathItem>; MAX_DYNAMIC_SEGMENTS] = Default::default();
if let Some(captures) = re.captures(res.resource_path().path()) { if let Some(captures) = re.captures(res.resource_path().path()) {
for (no, name) in names.iter().enumerate() { for (no, name) in names.iter().enumerate() {
if let Some(m) = captures.name(&name) { if let Some(m) = captures.name(&name) {
idx += 1; idx += 1;
pos = m.end(); pos = m.end();
segments[no] = PathItem::Segment(m.start() as u16, m.end() as u16); segments[no] =
Some(PathItem::Segment(m.start() as u16, m.end() as u16));
} else { } else {
log::error!( log::error!(
"Dynamic path match but not all segments found: {}", "Dynamic path match but not all segments found: {}",
@ -417,11 +421,12 @@ impl ResourceDef {
} }
let path = res.resource_path(); let path = res.resource_path();
for (idx, segment) in IntoIter::new(segments) for (idx, segment) in segments
.iter_mut()
.enumerate() .enumerate()
.take_while(|(i, _)| *i != idx) .take_while(|(i, _)| *i != idx)
{ {
path.add(names[idx], segment); path.add(names[idx], segment.take().unwrap());
} }
path.skip((pos + len) as u16); path.skip((pos + len) as u16);
true true
@ -432,7 +437,8 @@ impl ResourceDef {
let (ref pattern, ref names, len) = params[idx]; let (ref pattern, ref names, len) = params[idx];
let mut idx = 0; let mut idx = 0;
let mut pos = 0; let mut pos = 0;
let mut segments: [PathItem; MAX_DYNAMIC_SEGMENTS] = Default::default(); let mut segments: [Option<PathItem>; MAX_DYNAMIC_SEGMENTS] =
Default::default();
if let Some(captures) = pattern.captures(path) { if let Some(captures) = pattern.captures(path) {
for (no, name) in names.iter().enumerate() { for (no, name) in names.iter().enumerate() {
@ -440,7 +446,7 @@ impl ResourceDef {
idx += 1; idx += 1;
pos = m.end(); pos = m.end();
segments[no] = segments[no] =
PathItem::Segment(m.start() as u16, m.end() as u16); Some(PathItem::Segment(m.start() as u16, m.end() as u16));
} else { } else {
log::error!( log::error!(
"Dynamic path match but not all segments found: {}", "Dynamic path match but not all segments found: {}",
@ -458,11 +464,12 @@ impl ResourceDef {
} }
let path = res.resource_path(); let path = res.resource_path();
for (idx, segment) in IntoIter::new(segments) for (idx, segment) in segments
.iter_mut()
.enumerate() .enumerate()
.take_while(|(i, _)| *i != idx) .take_while(|(i, _)| *i != idx)
{ {
path.add(names[idx], segment); path.add(names[idx], segment.take().unwrap());
} }
path.skip((pos + len) as u16); path.skip((pos + len) as u16);
true true