Skip to main content

safe_migrate/rules/
mod.rs

1// FILE: src/rules/mod.rs
2pub mod constraints;
3pub mod destructive;
4pub mod expressions;
5pub mod idempotency;
6pub mod indexes;
7pub mod opaque;
8pub mod partitions;
9pub mod transactions;
10pub mod views;
11
12use crate::analysis::mutations::Mutation;
13use crate::analysis::state::{AnalysisState, CascadeResult, MutationResult};
14use crate::ast::identifiers::ObjectId;
15use crate::engine::config::Config;
16use crate::model::relation::RelationState;
17use crate::report::violations::{Violation, ViolationTier};
18use std::collections::HashMap;
19
20pub trait Rule {
21    fn id(&self) -> &'static str;
22    fn default_tier(&self) -> ViolationTier;
23    fn recipe(&self) -> &'static str;
24
25    fn evaluate(
26        &self,
27        mutation: &Mutation,
28        result: &MutationResult,
29        pre_relations: &HashMap<ObjectId, RelationState>,
30        state: &AnalysisState, // ENFORCED: Upgraded to pass DB baseline context
31        config: &Config,
32        cascade_closure: Option<&CascadeResult>, // NEW: Orchestrator-managed pre-state
33    ) -> Vec<Violation>;
34}