Skip to main content

verdict

Function verdict 

Source
pub fn verdict(criteria: &[IntentCriterion]) -> IntentVerdict
Expand description

The verdict of an intent from its criteria alone. Pure: no plan, no index, no ledger — the criteria already carry what the evidence said.

use majordomus_cli::intent::{verdict, IntentCriterion, IntentEvidenceState, IntentVerdictState};
let c = |evidence: &str, state: IntentEvidenceState| IntentCriterion {
    id: evidence.into(), criterion: "c".into(), evidence: evidence.into(),
    reference: "r".into(), met: state == IntentEvidenceState::Current, state,
    proof: None, reproduce: None,
};
let met = c("test", IntentEvidenceState::Current);
assert_eq!(verdict(&[met.clone()]).state, IntentVerdictState::Satisfied);
// a command the ledger cannot run leaves the evidence unable to answer
let cmd = c("command", IntentEvidenceState::NotDerivable);
assert_eq!(verdict(&[met.clone(), cmd.clone()]).state, IntentVerdictState::Unknown);
// a test the ledger can settle, and has not, says no
let unmet = c("test", IntentEvidenceState::NotRun);
let v = verdict(&[met, cmd, unmet]);
assert_eq!(v.state, IntentVerdictState::Unsatisfied);
assert_eq!(v.reasons.len(), 2);