use http::StatusCode;
use parlov_core::{OracleClass, OracleResult, Signal, Technique};
use super::patterns;
use super::scoring;
pub(super) fn classify(
baseline: StatusCode,
probe: StatusCode,
signals: Vec<Signal>,
technique: &Technique,
) -> OracleResult {
let pattern = patterns::lookup(baseline, probe);
let scoring_output =
scoring::compute(&pattern, &signals, technique.strength, baseline.as_u16());
OracleResult {
class: OracleClass::Existence,
verdict: scoring_output.verdict,
severity: scoring_output.severity,
confidence: scoring_output.confidence,
impact_class: scoring_output.impact_class,
reasons: scoring_output.reasons,
signals,
technique_id: Some(technique.id.to_string()),
vector: Some(technique.vector),
normative_strength: Some(technique.strength),
label: pattern.label.map(String::from),
leaks: pattern.leaks.map(String::from),
rfc_basis: pattern.rfc_basis.map(String::from),
}
}
#[cfg(test)]
#[path = "classifier_tests.rs"]
mod tests;