use crate::domain::model::check::{CheckViolationKind, Severity};
use crate::domain::usecases::check::{CheckViolation, IssueCheckCtx, IssueFinding, IssueRule};
pub struct ConfiguredPrefixRule;
pub const RULE_ID: &str = "issue/configured-prefix";
impl IssueRule for ConfiguredPrefixRule {
fn id(&self) -> &'static str {
RULE_ID
}
fn find(&self, ctx: &IssueCheckCtx<'_>) -> anyhow::Result<Vec<IssueFinding>> {
let Some(configured) = ctx.repo.configured_id_prefix() else {
return Ok(Vec::new());
};
let configured = configured.trim_end_matches('-');
let mut out = Vec::new();
for (path, issue) in ctx.issues {
if issue.id.prefix() == configured {
continue;
}
let kind = CheckViolationKind::WrongIdPrefix {
id: issue.id.as_entity_ref().clone(),
expected: configured.to_string(),
};
out.push(CheckViolation {
rule_id: RULE_ID,
path: path.clone(),
severity: Severity::Error,
kind,
});
}
Ok(out.into_iter().map(IssueFinding::report).collect())
}
}