Skip to main content

define_spec_config

Macro define_spec_config 

Source
macro_rules! define_spec_config {
    (
        $(#[$config_meta:meta])*
        $vis:vis struct $config:ident {
            $(
                $(#[$field_meta:meta])*
                $field:ident : $field_ty:ty {
                    provenance: $provenance:literal,
                    gate: $gate:expr,
                    source: $source:expr,
                    transform: $transform:expr
                    $(, fallback: $fallback:expr)?
                    $(,)?
                }
            ),* $(,)?
        }
        $(accessor $accessor_vis:vis fn $accessor:ident($ctx:ident);)?
        register $register_vis:vis fn $register:ident(
            $built:ident,
            $params:ident
        ) -> $return_ty:ty;
        prepare { $($prepare:tt)* }
        auras {
            $(
                {
                    provenance: $aura_provenance:literal,
                    gate: $aura_gate:expr,
                    aura: $aura:expr,
                    effect: $effect:expr $(,)?
                }
            ),* $(,)?
        }
        $(wiring {
            $(
                {
                    provenance: $wiring_provenance:literal,
                    gate: $wiring_gate:expr,
                    apply: $wiring_apply:block $(,)?
                }
            ),* $(,)?
        })?
        finish |$cfg:ident| $finish:block
    ) => { ... };
    (@fallback $field_ty:ty, $fallback:expr) => { ... };
    (@fallback $field_ty:ty) => { ... };
}