use super::conclude::concluded;
use super::types::{
FAIL_CLOSED_ANSWERED, Holding, LAWFUL_TWIN_REFUSED, PoisonResponse, ResponseReading, Road,
};
use crate::report::{FailureClass, TrialConclusion};
#[must_use]
#[track_caller]
pub fn fail_closed<Poison, Response>(
subject: Road<Poison, Response>,
reading: ResponseReading<Response>,
poison: &Poison,
) -> TrialConclusion {
let holding = match reading(&subject(poison)) {
PoisonResponse::Refused => Holding::Holds,
PoisonResponse::Answered => Holding::Fails,
};
concluded(holding, FailureClass::RefusedByCheck, FAIL_CLOSED_ANSWERED)
}
#[must_use]
#[track_caller]
pub fn admits_lawful<Lawful, Response>(
subject: Road<Lawful, Response>,
reading: ResponseReading<Response>,
lawful: &Lawful,
) -> TrialConclusion {
let holding = match reading(&subject(lawful)) {
PoisonResponse::Answered => Holding::Holds,
PoisonResponse::Refused => Holding::Fails,
};
concluded(holding, FailureClass::RefusedByCheck, LAWFUL_TWIN_REFUSED)
}