Skip to main content

sil_policy/
engine.rs

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}