use regex::Regex;
use std::collections::HashMap;
#[derive(Debug)]
pub struct Params {
params: HashMap<String, usize>,
regex: Regex,
}
impl Params {
pub fn new(regex: Regex, params: HashMap<String, usize>) -> Self {
Self { params, regex }
}
pub fn parameter<'a>(&'a self, base: &'a str, name: &str) -> Option<&'a str> {
if let Some(index) = self.params.get(name) {
let captures = self.regex.captures(base);
if let Some(captures) = captures {
if let Some(capture) = captures.get(*index) {
let capture = capture.as_str();
return Some(if capture.starts_with("/") {
&capture[1..]
} else {
capture
});
}
}
}
None
}
pub fn regex(&self) -> &Regex {
&self.regex
}
}