Struct emitter_rs::EventEmitter

source ·
pub struct EventEmitter {
    pub listeners: HashMap<String, Vec<Listener>>,
}

Fields§

§listeners: HashMap<String, Vec<Listener>>

Implementations§

source§

impl EventEmitter

source

pub fn new() -> Self

source

pub fn on<F, T>(&mut self, event: &str, callback: F) -> String
where for<'de> T: Deserialize<'de>, F: Fn(T) + 'static + Sync + Send,

Adds an event listener with a callback that will get called whenever the given event is emitted. Returns the id of the newly added listener.

§Example
use emitter_rs::EventEmitter;
let mut event_emitter = EventEmitter::new();

// This will print <"Hello world!"> whenever the <"Some event"> event is emitted
// The type of the `value` parameter for the closure MUST be specified and, if you plan to use the `value`, the `value` type
// MUST also match the type that is being emitted (here we just use a throwaway `()` type since we don't care about using the `value`)
event_emitter.on("Some event", |value: ()| println!("Hello world!"));
source

pub fn emit<T>(&mut self, event: &str, value: T) -> Vec<JoinHandle<()>>
where T: Serialize,

Emits an event of the given parameters and executes each callback that is listening to that event asynchronously by spawning a new thread for each callback.

§Example
use emitter_rs::EventEmitter;
let mut event_emitter = EventEmitter::new();

// Emits the <"Some event"> event and a value <"Hello programmer">
// The value can be of any type as long as it implements the serde Serialize trait
event_emitter.emit("Some event", "Hello programmer!");
source

pub fn remove_listener(&mut self, id_to_delete: &str) -> Option<String>

Removes an event listener with the given id

§Example
use emitter_rs::EventEmitter;
let mut event_emitter = EventEmitter::new();
let listener_id = event_emitter.on("Some event", |value: ()| println!("Hello world!"));

// Removes the listener that we just added
event_emitter.remove_listener(&listener_id);
source

pub fn on_limited<F, T>( &mut self, event: &str, limit: Option<u64>, callback: F ) -> String
where for<'de> T: Deserialize<'de>, F: Fn(T) + 'static + Sync + Send,

Adds an event listener that will only execute the listener x amount of times - Then the listener will be deleted. Returns the id of the newly added listener.

§Example
use emitter_rs::EventEmitter;
let mut event_emitter = EventEmitter::new();

// Listener will be executed 3 times. After the third time, the listener will be deleted.
event_emitter.on_limited("Some event", Some(3), |value: ()| println!("Hello world!"));
event_emitter.emit("Some event", ()); // 1 >> "Hello world!"
event_emitter.emit("Some event", ()); // 2 >> "Hello world!"
event_emitter.emit("Some event", ()); // 3 >> "Hello world!"
event_emitter.emit("Some event", ()); // 4 >> <Nothing happens here because listener was deleted after the 3rd call>
source

pub fn once<F, T>(&mut self, event: &str, callback: F) -> String
where for<'de> T: Deserialize<'de>, F: Fn(T) + 'static + Sync + Send,

Adds an event listener that will only execute the callback once - Then the listener will be deleted. Returns the id of the newly added listener.

§Example
use emitter_rs::EventEmitter;
let mut event_emitter = EventEmitter::new();

event_emitter.once("Some event", |value: ()| println!("Hello world!"));
event_emitter.emit("Some event", ()); // First event is emitted and the listener's callback is called once
// >> "Hello world!"

event_emitter.emit("Some event", ());
// >> <Nothing happens here since listener was deleted>
source

pub fn sync_emit<T>(&self, _event: &str, _value: T)
where T: Serialize,

NOT IMPLEMENTED! Emits an event of the given parameters in a synchronous fashion. Instead of executing each callback in a newly spawned thread, it will execute each callback in the order that they were inserted.

§Example
use emitter_rs::EventEmitter;
let mut event_emitter = EventEmitter::new();

event_emitter.on("Some event", |value: ()| println!("1")); // Guaranteed to be executed first
event_emitter.on("Some event", |value: ()| println!("2")); // Will not execute this until the first callback has finished executing
event_emitter.on("Some event", |value: ()| println!("3")); // Will not execute this until the second callback has finished executing

// Emits the <"Some event"> event and a value <"Hello programmer">
// The value can be of any type
event_emitter.sync_emit("Some event", "Hello programmer!");

Trait Implementations§

source§

impl Default for EventEmitter

source§

fn default() -> EventEmitter

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> 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, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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.