use std::path::{Path, PathBuf};
use crate::domain::model::decision_record::DecisionRecord;
use crate::domain::model::entity_ref::KnownRefs;
use crate::domain::model::issue::Issue;
use crate::domain::model::record_ref::{DecisionRecordRef, IssueRef};
use crate::domain::model::status::StatusesConfig;
use crate::domain::model::tag_descriptor::TagDescriptors;
use crate::domain::usecases::decision_record::DecisionRecordRepository;
use crate::domain::usecases::issue::IssueRepository;
pub use crate::domain::model::check::CheckViolation;
pub use crate::domain::model::decision_record::DecisionRecordFinding;
pub use crate::domain::model::issue::IssueFinding;
pub struct DrCheckCtx<'a> {
pub repo: &'a dyn DecisionRecordRepository,
pub records: &'a [(PathBuf, DecisionRecord)],
pub known_refs: &'a KnownRefs,
pub tag_descriptors: &'a TagDescriptors,
}
pub struct IssueCheckCtx<'a> {
pub repo: &'a dyn IssueRepository,
pub issues: &'a [(PathBuf, Issue)],
pub known_refs: &'a KnownRefs,
pub statuses: &'a StatusesConfig,
pub tag_descriptors: &'a TagDescriptors,
}
impl DrCheckCtx<'_> {
pub fn path_of(&self, id: &DecisionRecordRef) -> Option<&Path> {
self.records
.iter()
.find(|(_, r)| &r.id == id)
.map(|(p, _)| p.as_path())
}
}
impl IssueCheckCtx<'_> {
pub fn path_of(&self, id: &IssueRef) -> Option<&Path> {
self.issues
.iter()
.find(|(_, i)| &i.id == id)
.map(|(p, _)| p.as_path())
}
}
pub trait DecisionRecordRule {
fn id(&self) -> &'static str;
fn find(&self, ctx: &DrCheckCtx<'_>) -> anyhow::Result<Vec<DecisionRecordFinding>>;
}
pub trait IssueRule {
fn id(&self) -> &'static str;
fn find(&self, ctx: &IssueCheckCtx<'_>) -> anyhow::Result<Vec<IssueFinding>>;
}
pub use crate::domain::usecases::decision_record::rules::dr_rules;
pub use crate::domain::usecases::issue::rules::issue_rules;
pub mod fix;
pub mod run;
pub use fix::{run_fix, FixDrSource, FixIssueSource, FixItem, FixMode, FixReport};
pub use run::{
check_dr_kind, check_issue_corpus, run_check, CheckReport, CheckedEntry, DrSource, IssueSource,
};