bevy_enum_event
Derive macros that generate Bevy event and message types from enum variants.
Overview
Transform enum variants into distinct Bevy event/message structs automatically. Each variant becomes a separate type in a snake_case module, eliminating boilerplate while preserving type safety.
use *;
use EnumEvent;
// Generates: game_event::Victory, game_event::ScoreChanged, game_event::GameOver
Bevy Compatibility
| Bevy | bevy_enum_event |
|---|---|
| 0.18 | 0.3 |
| 0.17 | 0.2 |
| 0.16 | 0.1 |
Installation
[]
= "0.3.2"
Macros
Bevy 0.17+ distinguishes between three event/message types:
EnumEvent- Observer-based global events (triggered viaworld.trigger())EnumEntityEvent- Entity-targeted observer events with optional propagationEnumMessage- Buffered messages (written viaMessageWriter, read viaMessageReader)
EnumEvent
For observer-based events that are triggered globally and handled by observers.
use EnumEvent;
Using with Triggers and Observers
// Trigger the event
Deref Feature (default)
Single-field variants automatically implement Deref/DerefMut:
For multi-field variants, mark one field with #[enum_event(deref)]:
Disable with default-features = false.
EnumMessage
For buffered messages that are written/read between systems using MessageWriter/MessageReader.
Important: Each message type must be registered with app.add_message::<T>().
use *;
use EnumMessage;
EnumEntityEvent
Entity-targeted events that trigger entity-specific observers.
Requirements
- Named fields only (
{ field: Type }syntax) - Must have
entity: Entityfield or#[enum_event(target)]on a custom field
use *;
use EnumEntityEvent;
// Entity-specific observer
Custom Target Field
Event Propagation
Events can bubble up entity hierarchies:
// Basic propagation (uses ChildOf)
// Auto propagation (always bubbles)
// Custom relationship
Control propagation in observers:
Variant-Level Overrides
Override enum-level settings per variant:
Generics & Lifetimes
Full support for generic parameters and lifetimes:
Choosing the Right Macro
| Pattern | Macro | Use Case |
|---|---|---|
| Global triggers + observers | EnumEvent |
Game events, UI notifications, state changes |
| Buffered inter-system communication | EnumMessage |
Network commands, async results, command queues |
| Entity-targeted observers | EnumEntityEvent |
Entity interactions, damage systems, component events |
License
MIT OR Apache-2.0