workshop_rs/rules/
validate.rs1use crate::catalog::Catalog;
5use crate::core::error::Result;
6use crate::wir;
7
8pub fn validate_canonical_ids(program: &crate::Program, catalog: &Catalog) -> Result<()> {
12 let storage = program.to_wir()?;
13 validate_wir(&storage, catalog)
14}
15
16#[doc(hidden)]
17pub fn validate_canonical_ids_wir(program: &wir::Program, catalog: &Catalog) -> Result<()> {
18 validate_wir(program, catalog)
19}
20
21pub(crate) fn validate_wir(program: &wir::Program, catalog: &Catalog) -> Result<()> {
22 for (index, _) in program.rules.iter().enumerate() {
23 let rule = wir::RuleId::from_index(index);
24 let Some(rule_data) = program.rules.get(rule) else {
25 continue;
26 };
27 crate::events::validate::validate_event(&rule_data.event, rule_data.span, catalog)?;
28 for action in &rule_data.actions {
29 crate::actions::validate::validate_action(program, catalog, *action)?;
30 }
31 for condition in &rule_data.conditions {
32 crate::values::validate::validate_value(program, catalog, *condition)?;
33 }
34 }
35 Ok(())
36}