Optimized rule rewriting
This commit is contained in:
parent
23e3acb182
commit
dbbb1616dd
@ -284,32 +284,36 @@ impl Settings {
|
|||||||
RULESET_CURRENT_VERSION.to_string()
|
RULESET_CURRENT_VERSION.to_string()
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO make the return type a Result
|
fn update_rules(&self) -> std::result::Result<Vec<(Regex, String)>, String> {
|
||||||
fn update_rules(&self) -> Vec<(Regex, String)> {
|
|
||||||
let mut rules = self.rules.clone();
|
let mut rules = self.rules.clone();
|
||||||
|
|
||||||
// TODO Optimize that shit
|
|
||||||
// TODO break categories in different rules
|
// TODO break categories in different rules
|
||||||
|
for (from, to) in rules.iter_mut() {
|
||||||
|
let re = Regex::new("%\\D");
|
||||||
|
let from_match = re.is_match(from.as_str());
|
||||||
|
let to_match = re.is_match(to);
|
||||||
|
if from_match || to_match {
|
||||||
for (category, content) in &self.categories {
|
for (category, content) in &self.categories {
|
||||||
let mut temp_rules: Vec<(Regex, String)> = Vec::new();
|
if from_match {
|
||||||
for (from, to) in &rules {
|
*from = Regex::new(
|
||||||
let from = Regex::new(
|
|
||||||
from.to_string()
|
from.to_string()
|
||||||
.replace(
|
.replace(
|
||||||
format!("%{}", category).as_str(),
|
format!("%{}", category).as_str(),
|
||||||
format!("[{}]", content).as_str(),
|
format!("[{}]", content).as_str(),
|
||||||
)
|
)
|
||||||
.as_str(),
|
.as_str()
|
||||||
);
|
);
|
||||||
let to = to.to_string().replace(
|
}
|
||||||
|
if to_match {
|
||||||
|
*to = to.to_string().replace(
|
||||||
format!("%{}", category).as_str(),
|
format!("%{}", category).as_str(),
|
||||||
format!("[{}]", content).as_str(),
|
format!("[{}]", content).as_str()
|
||||||
);
|
);
|
||||||
temp_rules.push((from, to));
|
|
||||||
}
|
}
|
||||||
rules = temp_rules.clone();
|
|
||||||
}
|
}
|
||||||
rules
|
}
|
||||||
|
}
|
||||||
|
Ok(rules)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Apply list of rules to input
|
/// Apply list of rules to input
|
||||||
@ -337,7 +341,8 @@ impl Settings {
|
|||||||
/// let _output = settings.apply(input);
|
/// let _output = settings.apply(input);
|
||||||
/// ```
|
/// ```
|
||||||
pub fn apply(&self, s: String) -> std::result::Result<String, String> {
|
pub fn apply(&self, s: String) -> std::result::Result<String, String> {
|
||||||
let rules = self.update_rules();
|
// TODO Add Error handling
|
||||||
|
let rules = self.update_rules().unwrap();
|
||||||
let mut s = s.clone();
|
let mut s = s.clone();
|
||||||
debug!("===============================================");
|
debug!("===============================================");
|
||||||
for (from, to) in rules {
|
for (from, to) in rules {
|
||||||
|
Loading…
Reference in New Issue
Block a user