Macro components_arena::Component [−][src]
macro_rules! Component { ( ($(class=$class:ident)?) $vis:vis enum $name:ident $($body:tt)* ) => { ... }; ( ($(class=$class:ident)?) $vis:vis struct $name:ident $($body:tt)* ) => { ... }; ( @impl [$vis:vis] [$name:ident] [] [] [] [] $($body:tt)* ) => { ... }; ( @impl [$vis:vis] [$name:ident] [$class:ident] [] [] [] $($body:tt)* ) => { ... }; ( @impl [$vis:vis] [$name:ident] [] [$($g:tt)+] [$($r:tt)+] [$($w:tt)*] $($body:tt)* ) => { ... }; ( @impl [$vis:vis] [$name:ident] [$class:ident] [$($g:tt)+] [$($r:tt)+] [$($w:tt)*] $($body:tt)* ) => { ... }; ( @self [$name:ident] ) => { ... }; ( @class [$vis:vis] [$name:ident] [$class:ident] [$($g:tt)*] [$($r:tt)*] [$($w:tt)*] ) => { ... }; }
Expand description
Macro attribute for deriving Component
trait.
Examples
Non-generic component
macro_attr! { #[derive(Component!)] struct Item { /* ... */ } } static ITEM: ComponentClassMutex<Item> = ComponentClassMutex::new(); // ... let mut arena = Arena::new(&mut ITEM.lock().unwrap()); let id = arena.insert(|id| (Item { /* ... */ }, id));
Generic component
macro_attr! { #[derive(Component!(class=ItemComponent))] struct Item<T> { context: T } } static ITEM: ComponentClassMutex<ItemComponent> = ComponentClassMutex::new(); // ... let mut arena_u8 = Arena::new(&mut ITEM.lock().unwrap()); let _ = arena_u8.insert(|id| (Item { context: 7u8 }, id)); let mut arena_u32 = Arena::new(&mut ITEM.lock().unwrap()); let _ = arena_u32.insert(|id| (Item { context: 7u32 }, id));