1use crate::decision::Decision;
2use crate::rules::{RiskInput, evaluate_risk};
3
4pub fn evaluate(input: RiskInput, original: &str) -> Decision {
5 let score = evaluate_risk(input);
6
7 if score > 0.8 {
8 return Decision::Block;
9 }
10
11 if score > 0.5 {
12 return Decision::Warn;
13 }
14
15 if contains_repairable_issue(original) {
16 return Decision::Rewrite(sanitize(original));
17 }
18
19 Decision::Allow
20}
21
22fn contains_repairable_issue(input: &str) -> bool {
23 input.contains('\u{200B}') || input.contains("ƒ")
24}
25
26fn sanitize(input: &str) -> String {
27 input.replace('ƒ', "f")
28}