saf_core/logging/registry.rs
1//! Module/phase registry for compile-time validation of `saf_log!` call sites.
2//!
3//! The `saf_log_module!` macro generates a hidden module hierarchy that
4//! `saf_log!` references to produce compile errors on typos.
5
6/// Declares SAF log modules and their phases for compile-time validation.
7///
8/// Each module/phase pair becomes a unit struct in a hidden `__saf_log_registry`
9/// module. The `saf_log!` macro references these structs so that invalid
10/// `module::phase` combinations produce compile errors.
11#[macro_export]
12macro_rules! saf_log_module {
13 ($($module:ident { $($phase:ident),* $(,)? }),* $(,)?) => {
14 #[doc(hidden)]
15 #[allow(non_camel_case_types, dead_code, non_snake_case)]
16 pub mod __saf_log_registry {
17 $(
18 pub mod $module {
19 $(pub struct $phase;)*
20 }
21 )*
22 }
23 };
24}
25
26// The actual registry is declared in lib.rs (crate root) so that
27// $crate::__saf_log_registry resolves correctly in cross-crate usage.