EventManager

Struct EventManager 

Source
pub struct EventManager { /* private fields */ }

Implementations§

Source§

impl EventManager

Source

pub fn on<S, F, T, Fut>(&self, event: S, callback: F) -> EventHandler
where S: Into<String>, T: 'static + Send + Sync + Clone, F: FnMut(T) -> Fut + Send + 'static, Fut: Future<Output = Result<(), Error>> + Send + 'static,

Register event handler for a specific event name.

§Parameters
  • event - The event name (any type that matches an Into<String>)
  • callback - An async moved callback that accepts a single parameter as an argument. The argument can be anything that might be both Send + Sync. You can trick multiple parameters by turning them in a single tuple.
§Return

Returns an EventHandler that can be used by the unregister() method.

§Errors

If the event handler does not match the expected emitted event exactly it will fail silently. That means if the tuple gave in the callback parameter does not exactly match the emit one no handler will be called.

§Example
use hermes_five::utils::EventManager;
use hermes_five::pause;

#[hermes_five::runtime]
async fn main() {
    // Instantiate an EventManager
    let events: EventManager = Default::default();

    // Register various handlers for the same event.
    events.on("ready", |name: String| async move { Ok(()) });
    events.on("ready", |age: u8| async move { Ok(()) });
    events.on("ready", |whatever: Vec<[u8;4]>| async move { Ok(()) });
    events.on("ready", |(name, age): (&str, u8)| async move {
        println!("Event handler with parameters: {} {}.", name, age);
        pause!(1000);
        println!("Event handler done");
        Ok(())
    });

    // Invoke handlers for "ready" event.
    events.emit("ready", ("foo", 69u8));

    // None matching handler (because of parameters) will never be called.
    events.emit("ready", ("bar"));
}
Source

pub fn emit<S, T>(&self, event: S, payload: T)
where S: Into<String>, T: 'static + Send + Sync,

Invoke all event handlers registered for a specific event name. Only the callback registered by the on() method and whose payload matches the declared callback type will be called. All others will be silently skipped.

§Parameters
  • event: The event name (any type that matches an Into<String>)
  • payload: The event payload (must be 'static + Send + Sync) The payload can be anything that might be both Send + Sync. You can trick multiple parameters by turning them in a single tuple.
§Example
use hermes_five::utils::EventManager;

#[hermes_five::runtime]
async fn main() {
    // Instantiate an EventManager
    let events: EventManager = Default::default();

    // Register various handlers for the same event.
    events.on("ready", |name: &str| async move {
        println!("Callback 1");
        Ok(())
    });
    events.on("ready", |age: u8| async move {
        println!("Callback 2");
        Ok(())
    });

    // Invoke handlers for "ready" event matching &str parameter.
    events.emit("ready", "foo");
    // Invoke handlers for "ready" event matching u8 parameter.
    events.emit("ready", 42);

    // No event registered for "nothing" event.
    events.emit("nothing", ());
}
Source

pub fn unregister(&self, handler: EventHandler)

Unregister a given handler if found.

§Example
use hermes_five::utils::EventManager;

#[hermes_five::runtime]
async fn main() {
    // Instantiate an EventManager
    let events: EventManager = Default::default();

    // Register various handlers for the same event.
    let handler1 = events.on("ready", |age: u8| async move {
        println!("Callback 1");
        Ok(())
    });
    let handler2 = events.on("ready", |age: u8| async move {
        println!("Callback 2");
        Ok(())
    });

    // Unregister handler 1.
    events.unregister(handler1);

    // Invoke handlers for "ready" event matching u8 parameter.
    // Only the callback2 remains to be called here.
    events.emit("ready", 42);
}

Trait Implementations§

Source§

impl Clone for EventManager

Source§

fn clone(&self) -> EventManager

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EventManager

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for EventManager

Source§

fn default() -> EventManager

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.