macro_rules! define_protocol_modules { ($side:ident => { $( $module:ident => { $( $version:ident => $protocol_mod:ident => $protocol_name:literal ),+ $(,)? } ),+ $(,)? }) => { pub mod $side { $( pub mod $module { $( pub mod $version { // This module is generated by hyprwire-scanner, so its public API // cannot be annotated in this crate. #[allow( clippy::missing_panics_doc, clippy::must_use_candidate )] pub mod $protocol_mod { hyprwire::include_protocol!($protocol_name); pub use $side::*; pub use spec::*; } } )+ } )+ } }; } define_protocol_modules!(server => { session_power => { v1 => session_power_v1 => "session_power_v1" }, session_core => { v1 => session_core_v1 => "session_core_v1" }, session_inhibit => { v1 => session_inhibit_v1 => "session_inhibit_v1" }, session_management => { v1 => session_management_v1 => "session_management_v1", v2 => session_management_v2 => "session_management_v2", }, session_backlight => { v1 => session_backlight_v1 => "session_backlight_v1" }, }); define_protocol_modules!(client => { session_power => { v1 => session_power_v1 => "session_power_v1" }, session_core => { v1 => session_core_v1 => "session_core_v1" }, session_inhibit => { v1 => session_inhibit_v1 => "session_inhibit_v1" }, session_management => { v1 => session_management_v1 => "session_management_v1", v2 => session_management_v2 => "session_management_v2", }, session_backlight => { v1 => session_backlight_v1 => "session_backlight_v1" }, });