use prikk_store::RepositoryVerification;
pub(crate) struct VerdictCondition {
pub(crate) id: &'static str,
pub(crate) message: &'static str,
pub(crate) check: fn(&RepositoryVerification) -> bool,
}
pub(crate) const VERDICT_CONDITIONS: &[VerdictCondition] = &[
VerdictCondition {
id: "stage-failure",
message: "repository verification did not complete every stage; see stage outcomes above",
check: RepositoryVerification::has_stage_failure,
},
VerdictCondition {
id: "item-failure",
message: "repository verification found at least one failed object, block, or ref; see \
item outcomes above",
check: RepositoryVerification::has_item_failure,
},
VerdictCondition {
id: "active-wal-metadata-integrity",
message: "repository has active-WAL metadata integrity issues",
check: RepositoryVerification::has_active_wal_metadata_integrity_issue,
},
VerdictCondition {
id: "blocking-ref-publication",
message: "repository has interrupted or divergent ref publication state",
check: RepositoryVerification::has_blocking_ref_publication_issues,
},
VerdictCondition {
id: "publication-trust",
message: "repository has publication-trust issues",
check: RepositoryVerification::has_publication_trust_issues,
},
VerdictCondition {
id: "commit-index-divergence",
message: "commit-index cache disagrees with the worktree for at least one path",
check: RepositoryVerification::has_commit_index_divergence,
},
VerdictCondition {
id: "lifecycle-cache-divergence",
message: "lifecycle-state cache disagrees with an independent replay",
check: RepositoryVerification::has_lifecycle_cache_divergence,
},
VerdictCondition {
id: "active-wal-ordering",
message: "active WAL contains an out-of-order or duplicate queued patch sequence",
check: RepositoryVerification::has_active_wal_ordering_issue,
},
VerdictCondition {
id: "merge-baseline-divergence",
message: "a merge block's recorded baseline is not a common ancestor of its parents",
check: RepositoryVerification::has_merge_baseline_divergence,
},
];
pub(crate) fn first_true_condition(
report: &RepositoryVerification,
) -> Option<&'static VerdictCondition> {
VERDICT_CONDITIONS
.iter()
.find(|condition| (condition.check)(report))
}
pub(crate) fn all_true_conditions(
report: &RepositoryVerification,
) -> Vec<&'static VerdictCondition> {
VERDICT_CONDITIONS
.iter()
.filter(|condition| (condition.check)(report))
.collect()
}