Skip to main content

texform_transform/rewrite/
registry.rs

1//! Static registry of all available rewrite rules.
2
3#[cfg(debug_assertions)]
4use std::sync::Once;
5
6use crate::rewrite::rule::RewriteRule;
7use crate::rewrite::rules::ALL_RULES;
8
9#[cfg(debug_assertions)]
10fn debug_validate_registered_rules_once() {
11    static ONCE: Once = Once::new();
12    ONCE.call_once(|| {
13        // Touching every meta once makes macro-level debug assertions fail as
14        // soon as the registry is consumed, instead of much later during rule
15        // execution.
16        for rule in ALL_RULES {
17            let _ = rule.meta();
18        }
19    });
20}
21
22/// Returns every registered rewrite rule.
23pub fn all_rules() -> &'static [&'static dyn RewriteRule] {
24    #[cfg(debug_assertions)]
25    debug_validate_registered_rules_once();
26    ALL_RULES
27}