parlov-analysis 0.3.0

Analysis engine trait and signal detection for parlov.
Documentation
//! Classifies (baseline, probe) status code pairs as `OracleResult` values.
//!
//! `ExistenceAnalyzer` delegates to [`classify`] after extracting status codes
//! from the `ProbeSet`. The pattern table lives in the sibling `patterns` module.

use http::StatusCode;
use parlov_core::{OracleClass, OracleResult};

use super::patterns;

/// Classifies a (baseline, probe) status code pair as an `OracleResult`.
///
/// Returns `Likely/Low` for unrecognised differentials and `NotPresent` when
/// both codes are identical. Never returns `Inconclusive`.
pub(super) fn classify(baseline: StatusCode, probe: StatusCode) -> OracleResult {
    let evidence = vec![format!(
        "{} (baseline) vs {} (probe)",
        baseline.as_u16(),
        probe.as_u16(),
    )];

    let m = patterns::lookup(baseline, probe);

    OracleResult {
        class: OracleClass::Existence,
        verdict: m.verdict,
        evidence,
        severity: m.severity,
        label: m.label.map(String::from),
        leaks: m.leaks.map(String::from),
        rfc_basis: m.rfc_basis.map(String::from),
        baseline_summary: None,
        probe_summary: None,
        header_diffs: vec![],
    }
}

#[cfg(test)]
#[path = "classifier_tests.rs"]
mod tests;