hx-event

Crates.iohx-event
lib.rshx-event
version0.1.1
created_at2025-12-15 00:23:51.373063+00
updated_at2025-12-15 00:50:06.297597+00
descriptionSimple event system with function listeners and add assign sub assign
homepage
repository
max_upload_size
id1985330
size45,665
Oktay (plaintextdotyml)

documentation

README

hx_event

hx_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.


✨ Features

  • Generic event type supporting any owner and event data.
  • Add and remove listeners using += and -=.
  • Supports triggering events with or without custom event data.
  • Simple macro-based invocation.

🚀 Usage Example

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!

⚙️ How It Works

  • Event<Owner, Data> holds a list of functions with signature fn(&mut Owner, &Data).
  • You add listeners with += and remove them with -=.
  • The invoke_event! macro creates a snapshot of registered listeners, ensuring safe iteration during event dispatch.

📦 Adding to Your Project

Add this line to your Cargo.toml:

[dependencies]
hx_event = { path = "./path/to/hx_event" }

Then import it:

use hx_event::{Event, invoke_event};

🪪 License

MIT License
Copyright (c) 2025

Commit count: 0

cargo fmt