[][src]Macro revent::node

macro_rules! node {
    (
        $($source:path),+$(,)? {
            $($listen:ident: $listen_type:path),*$(,)?
        } => $hub:ident($on:path) {
            $($emit:ident: $emit_type:path),*$(,)?
        }
    ) => { ... };
}

Generate an intermediate node in the signal chain.

The macro invocation

This example is not tested
use revent::node;

node! {
    HubName {
        signal_name_1: X,
        signal_name_2: Y,
    } => MyNode(Handler) {
        signal_name_3: Z,
    }
}

generates the code

This example is not tested
struct MyNode { ... }

impl MyNode {
    pub fn subscribe<T>(&mut self, input: T::Input)
    where
        T: revent::Nodified + revent::Selfscriber<Self> + revent::Subscriber,
        T::Node: for<'a> From<&'a Self>,
    { ... }

    pub fn signal_name_3(&mut self) -> &mut revent::Signal<dyn Z> { ... }
}

impl From<&'_ HubName> for MyNode {
    fn from(item: &HubName) -> Self { ... }
}

impl revent::Selfscriber<HubName> for MyHandler {
    fn name() -> &'static str { ... }
    fn type_id() -> TypeId { ... }
    fn selfscribe(holder: &HubName, item: Rc<RefCell<Self>>) { ... }
}

impl revent::Nodified for MyHandler {
    type Node = MyNode;
}