mirror of https://github.com/fafhrd91/actix-net
simplify return type of `parse()` and rename ..
`with_prefix()`
This commit is contained in:
parent
d1438cda48
commit
a29a1a6dca
|
@ -48,29 +48,19 @@ impl ResourceDef {
|
|||
/// Panics if path pattern is malformed.
|
||||
pub fn new<T: IntoPattern>(path: T) -> Self {
|
||||
if path.is_single() {
|
||||
let patterns = path.patterns();
|
||||
ResourceDef::with_prefix(&patterns[0], false)
|
||||
ResourceDef::from_single_pattern(&path.patterns()[0], false)
|
||||
} else {
|
||||
let set = path.patterns();
|
||||
let mut data = Vec::new();
|
||||
let mut re_set = Vec::new();
|
||||
|
||||
for path in set {
|
||||
let (pattern, _, _) = ResourceDef::parse(&path, false, true);
|
||||
|
||||
let re = match Regex::new(&pattern) {
|
||||
Ok(re) => re,
|
||||
Err(err) => panic!("Wrong path pattern: \"{}\" {}", path, err),
|
||||
};
|
||||
// actix creates one router per thread
|
||||
let names: Vec<_> = re
|
||||
.capture_names()
|
||||
.filter_map(|name| {
|
||||
name.map(|name| Box::leak(Box::new(name.to_owned())).as_str())
|
||||
})
|
||||
.collect();
|
||||
data.push((re, names));
|
||||
re_set.push(pattern);
|
||||
for pattern in path.patterns() {
|
||||
match ResourceDef::parse(&pattern, false, true) {
|
||||
(PatternType::Dynamic(re, names), _) => {
|
||||
re_set.push(re.as_str().to_owned());
|
||||
data.push((re, names));
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
||||
ResourceDef {
|
||||
|
@ -89,7 +79,7 @@ impl ResourceDef {
|
|||
///
|
||||
/// Panics if path regex pattern is malformed.
|
||||
pub fn prefix(path: &str) -> Self {
|
||||
ResourceDef::with_prefix(path, true)
|
||||
ResourceDef::from_single_pattern(path, true)
|
||||
}
|
||||
|
||||
/// Parse path pattern and create new `Pattern` instance.
|
||||
|
@ -100,7 +90,7 @@ impl ResourceDef {
|
|||
///
|
||||
/// Panics if path regex pattern is malformed.
|
||||
pub fn root_prefix(path: &str) -> Self {
|
||||
ResourceDef::with_prefix(&insert_slash(path), true)
|
||||
ResourceDef::from_single_pattern(&insert_slash(path), true)
|
||||
}
|
||||
|
||||
/// Resource id
|
||||
|
@ -113,36 +103,17 @@ impl ResourceDef {
|
|||
self.id = id;
|
||||
}
|
||||
|
||||
/// Parse path pattern and create new `Pattern` instance with custom prefix
|
||||
fn with_prefix(path: &str, for_prefix: bool) -> Self {
|
||||
let path = path.to_owned();
|
||||
let (pattern, elements, is_dynamic) = ResourceDef::parse(&path, for_prefix, false);
|
||||
|
||||
let tp = if is_dynamic {
|
||||
let re = match Regex::new(&pattern) {
|
||||
Ok(re) => re,
|
||||
Err(err) => panic!("Wrong path pattern: \"{}\" {}", path, err),
|
||||
};
|
||||
// actix creates one router per thread
|
||||
let names = re
|
||||
.capture_names()
|
||||
.filter_map(|name| {
|
||||
name.map(|name| Box::leak(Box::new(name.to_owned())).as_str())
|
||||
})
|
||||
.collect();
|
||||
PatternType::Dynamic(re, names)
|
||||
} else if for_prefix {
|
||||
PatternType::Prefix(pattern)
|
||||
} else {
|
||||
PatternType::Static(pattern)
|
||||
};
|
||||
/// Parse path pattern and create a new instance
|
||||
fn from_single_pattern(pattern: &str, for_prefix: bool) -> Self {
|
||||
let pattern = pattern.to_owned();
|
||||
let (tp, elements) = ResourceDef::parse(&pattern, for_prefix, false);
|
||||
|
||||
ResourceDef {
|
||||
tp,
|
||||
elements: Some(elements),
|
||||
id: 0,
|
||||
name: String::new(),
|
||||
pattern: path,
|
||||
pattern: pattern.to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -404,15 +375,17 @@ impl ResourceDef {
|
|||
mut pattern: &str,
|
||||
mut for_prefix: bool,
|
||||
force_dynamic: bool,
|
||||
) -> (String, Vec<PatternElement>, bool) {
|
||||
) -> (PatternType, Vec<PatternElement>) {
|
||||
if !force_dynamic && pattern.find('{').is_none() && !pattern.ends_with('*') {
|
||||
return (
|
||||
String::from(pattern),
|
||||
vec![PatternElement::Const(String::from(pattern))],
|
||||
false,
|
||||
);
|
||||
let tp = if for_prefix {
|
||||
PatternType::Prefix(String::from(pattern))
|
||||
} else {
|
||||
PatternType::Static(String::from(pattern))
|
||||
};
|
||||
return (tp, vec![PatternElement::Const(String::from(pattern))]);
|
||||
}
|
||||
|
||||
let pattern_orig = pattern.to_owned();
|
||||
let mut elements = Vec::new();
|
||||
let mut re = format!("{}^", REGEX_FLAGS);
|
||||
let mut dyn_elements = 0;
|
||||
|
@ -452,7 +425,18 @@ impl ResourceDef {
|
|||
if !for_prefix {
|
||||
re.push('$');
|
||||
}
|
||||
(re, elements, true)
|
||||
|
||||
let re = match Regex::new(&re) {
|
||||
Ok(re) => re,
|
||||
Err(err) => panic!("Wrong path pattern: \"{}\" {}", pattern_orig, err),
|
||||
};
|
||||
// actix creates one router per thread
|
||||
let names = re
|
||||
.capture_names()
|
||||
.filter_map(|name| name.map(|name| Box::leak(Box::new(name.to_owned())).as_str()))
|
||||
.collect();
|
||||
|
||||
(PatternType::Dynamic(re, names), elements)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue