cargo-allow 0.1.3

Source-tree exception ledger and policy scanner for Rust repositories.
pub(crate) const NEW_UNRECEIPTED_FINDING: &str = "new_unreceipted_finding";
pub(crate) const OCCURRENCE_LIMIT_EXCEEDED: &str = "occurrence_limit_exceeded";
pub(crate) const EXPIRED_ALLOW: &str = "expired_allow";
pub(crate) const STALE_ALLOW: &str = "stale_allow";
pub(crate) const AMBIGUOUS_SELECTOR: &str = "ambiguous_selector";
pub(crate) const UNSAFE_MISSING_EVIDENCE: &str = "unsafe_missing_evidence";
pub(crate) const MISSING_EVIDENCE: &str = "missing_evidence";
pub(crate) const MISSING_REQUIRED_FIELD: &str = "missing_required_field";
pub(crate) const INVALID_SELECTOR: &str = "invalid_selector";
pub(crate) const BASELINE_DEBT: &str = "baseline_debt";
pub(crate) const REVIEW_DUE: &str = "review_due";
pub(crate) const MATCHED: &str = "matched";
pub(crate) const BROAD_SCOPE: &str = "broad_scope";
pub(crate) const BROKEN_EVIDENCE_LINK: &str = "broken_evidence_link";
pub(crate) const WEAK_EVIDENCE_REFERENCE: &str = "weak_evidence_reference";

pub(crate) const WORK_ITEM_KINDS: &[&str] = &[
    NEW_UNRECEIPTED_FINDING,
    OCCURRENCE_LIMIT_EXCEEDED,
    EXPIRED_ALLOW,
    STALE_ALLOW,
    AMBIGUOUS_SELECTOR,
    UNSAFE_MISSING_EVIDENCE,
    MISSING_EVIDENCE,
    MISSING_REQUIRED_FIELD,
    INVALID_SELECTOR,
    BASELINE_DEBT,
    REVIEW_DUE,
    MATCHED,
    BROAD_SCOPE,
    BROKEN_EVIDENCE_LINK,
    WEAK_EVIDENCE_REFERENCE,
];

pub(crate) fn parse_work_item_kind_filter(value: &str) -> Result<String, String> {
    let canonical = value.replace('-', "_");
    if WORK_ITEM_KINDS.iter().any(|kind| *kind == canonical) {
        return Ok(canonical);
    }
    Err(format!("unknown work item kind `{value}`"))
}