Skip to main content

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.