<div align="center">
    <span><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/Rust_programming_language_black_logo.svg/1920px-Rust_programming_language_black_logo.svg.png" width="100"></span>
</div>

### Event System 

Provides a simple lightweight event system for Rust. 

[Crate on Crates.io](https://crates.io/crates/event_system)

### Example

The first entry in the macro is the name of the event system struct.

Any following entries take the form of struct-enum variants, where the name is the event name and the data the structure for the payload when the event is fired.

```rust
use event_system::create_event_system;

create_event_system! {
    EventSystem // <- Name of struct
    ApplicationLoad {}
    ApplicationExit {}
    KeyDown {
        key: u8,
    }
}

fn main() {
    let mut events = EventSystem::new();
    events.register_key_down(key_down);

    events.fire_application_load();
    events.fire_key_down(EventKeyDown { key: 55 });
    events.fire_application_exit();
}

fn key_down(packet: EventKeyDown) -> bool {
    println!("Key down {:?}", packet.key);
    true
}
```