pub struct PriorityEventDispatcher<P, T>where
    P: Ord,
    T: PartialEq + Eq + Hash + Clone + Send + Sync + 'static,
{ /* private fields */ }
Expand description

In charge of prioritised sync dispatching to all listeners. Owns a map event-variants and Weak-references to their listeners and/or owns Fns. Opposed to EventListener, this structure utilises one BTreeMap per event-type to order listeners by a given priority-level.

Note: Consider implementing your own Ord-trait, if you want a different kind of order.

Implementations§

Adds a Listener to listen for an event_identifier, considering a given priority implementing the Ord-trait, to sort dispatch-order. If event_identifier is a new HashMap-key, it will be added.

Note: If your Enum owns fields you need to consider implementing the Hash- and PartialEq-trait if you want to ignore fields, see second example for an implementation-suggestion.

Examples

Adding a Listener to the dispatcher:

extern crate hey_listen;

use std::sync::Arc;
use hey_listen::{Listener, Mutex, PriorityEventDispatcher, SyncDispatcherRequest};

#[derive(Clone, Eq, Hash, PartialEq)]
enum Event {
    EventType,
}

struct ListenerStruct {}

impl Listener<Event> for ListenerStruct {
    fn on_event(&mut self, event: &Event) -> Option<SyncDispatcherRequest> { None }
}

fn main() {
    let listener = Arc::new(Mutex::new(ListenerStruct {}));
    let mut dispatcher: PriorityEventDispatcher<u32, Event> = PriorityEventDispatcher::default();

    dispatcher.add_listener(Event::EventType, &listener, 1);
}

Declaring your own Hash- and PartialEq-trait to bypass hashing on fields:

use std::hash::{Hash, Hasher};
use std::mem::discriminant;

#[derive(Clone)]
enum Event {
    TestVariant(i32),
}

impl Hash for Event {
    fn hash<H: Hasher>(&self, _state: &mut H) {}
}

impl PartialEq for Event {
    fn eq(&self, other: &Event) -> bool {
        discriminant(self) == discriminant(other)
    }
}

impl Eq for Event {}

Adds an Fn to listen for an event_identifier, considering a given priority implementing the Ord-trait in order to sort dispatch-order. If event_identifier is a new HashMap-key, it will be added.

Examples

Adding an Fn to the dispatcher:

extern crate hey_listen;

use hey_listen::{Mutex, PriorityEventDispatcher, SyncDispatcherRequest};
use std::sync::Arc;

#[derive(Clone, Eq, Hash, PartialEq)]
enum Event {
    EventType,
}

struct EventListener {
    used_method: bool,
}

impl EventListener {
    fn test_method(&mut self, _event: &Event) {
        self.used_method = true;
    }
}

fn main() {
    let listener = Arc::new(Mutex::new(EventListener { used_method: false }));
    let mut dispatcher: PriorityEventDispatcher<u32, Event> = PriorityEventDispatcher::default();
    let weak_listener_ref = Arc::downgrade(&Arc::clone(&listener));

    let closure = Box::new(move |event: &Event| -> Option<SyncDispatcherRequest> {
        if let Some(listener) = weak_listener_ref.upgrade() {
            listener.lock().test_method(&event);

            None
        } else {
            Some(SyncDispatcherRequest::StopListening)
        }
    });

    dispatcher.add_fn(Event::EventType, closure, 1);
}

All Listeners listening to a passed event_identifier will be called via their implemented on_event-method. Fns returning Result with Ok(()) will be retained and Err(SyncDispatcherRequest::StopListening) will cause them to be removed from the event-dispatcher.

Notice: Listeners will called ordered by their priority-level.

Trait Implementations§

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

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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

The alignment of pointer.
The type for initializers.
Initializes a with the given initializer. Read more
Dereferences the given pointer. Read more
Mutably dereferences the given pointer. Read more
Drops the object pointed to by the given pointer. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.