| Crates.io | hx-event |
| lib.rs | hx-event |
| version | 0.1.1 |
| created_at | 2025-12-15 00:23:51.373063+00 |
| updated_at | 2025-12-15 00:50:06.297597+00 |
| description | Simple event system with function listeners and add assign sub assign |
| homepage | |
| repository | |
| max_upload_size | |
| id | 1985330 |
| size | 45,665 |
hx_eventhx_event is a lightweight, dependency-free Rust event system that provides type-safe, generic event handling.
It lets you easily register, remove, and invoke events with or without payload data.
+= and -=.use hx_event::{invoke_event, Event};
#[derive(Debug)]
struct Player {
name: String,
on_death: Event<Player, String>,
}
impl Player {
fn new(name: &str) -> Self {
Self {
name: name.to_string(),
on_death: Event::new(),
}
}
fn die(&mut self) {
println!("{} has died.", self.name);
// Pass a custom message as event data
let message = format!("{} has fallen in battle!", self.name);
invoke_event!(self, on_death, &message);
}
}
// Example event listener
fn on_player_death(player: &mut Player, message: &String) {
println!("Event caught! Player: {:?}, Message: {}", player.name, message);
}
fn main() {
let mut player = Player::new("Arthas");
// Add an event listener
player.on_death += on_player_death;
// Trigger the event
player.die();
// Optionally remove the listener
player.on_death -= on_player_death;
}
Output Example:
Arthas has died.
Event caught! Player: "Arthas", Message: Arthas has fallen in battle!
Event<Owner, Data> holds a list of functions with signature fn(&mut Owner, &Data).+= and remove them with -=.invoke_event! macro creates a snapshot of registered listeners, ensuring safe iteration during event dispatch.Add this line to your Cargo.toml:
[dependencies]
hx_event = { path = "./path/to/hx_event" }
Then import it:
use hx_event::{Event, invoke_event};
MIT License
Copyright (c) 2025