Macro Rules
Demonstrates that macro_rules! definitions and derive macros inside a #[wgsl] module are stripped from WGSL code generation but remain available in the Rust source. The struct below carries #[derive(Debug, Clone, Copy)], which produces no WGSL output.
Rust Source
#![allow(unused)] fn main() { #[wgsl] pub mod macro_rules_definitions { //! It is possible to define `macro_rules!` within a WGSL module. //! //! Macros defined this way **will not generate WGSL code**, but will pass //! through to Rust code. //! //! Said another way - `macro_rules!` definitions will be stripped from WGSL //! code generation but will remain in your Rust source. #[expect(unused_macros)] macro_rules! my_macro { ($id:ident) => { id }; } // It's also possible to use derive macros. // // Derive macros pass through without generating any extra WGSL. #[derive(Debug, Clone, Copy)] pub struct Data { pub inner: f32, } } }
Generated WGSL
struct Data {
inner: f32
}
Notes
macro_rules!definitions are stripped from WGSL output entirely but remain usable in Rust.- Derive macros (e.g.
#[derive(Debug, Clone, Copy)]) pass through without generating any extra WGSL; only the struct definition itself is emitted.