Skip to main content

MergeExternal

Trait MergeExternal 

Source
pub trait MergeExternal<'a, E> {
    type Item;

    // Required method
    fn merge_external(
        self,
        external_events: impl Stream<Item = E> + Unpin + 'a,
    ) -> Box<dyn Stream<Item = Self::Item> + Unpin + 'a>;
}
Expand description

Allows merging an external event stream into an existing event stream.

Required Associated Types§

Source

type Item

The item type yielded from the merged stream.

Required Methods§

Source

fn merge_external( self, external_events: impl Stream<Item = E> + Unpin + 'a, ) -> Box<dyn Stream<Item = Self::Item> + Unpin + 'a>

Merge the given stream into an existing event stream.

Returns a new event stream that yields items from both streams. The ordering between the two streams is not guaranteed. Each item is wrapped in MergedEvent so the consumer can tell a dora Event from an external one; note that a dora Event::Stop still has to be handled explicitly to leave the loop.

use dora_node_api::{DoraNode, Event};
use dora_node_api::merged::{MergeExternal, MergedEvent};
use futures::StreamExt;

let (_node, events) = DoraNode::init_from_env().unwrap();

// Any `Stream` can be merged in; here a trivial external source.
let external = futures::stream::iter(["external-tick"]);
let mut merged = events.merge_external(external);

futures::executor::block_on(async {
    while let Some(event) = merged.next().await {
        match event {
            MergedEvent::Dora(Event::Stop(_)) => break,
            MergedEvent::Dora(_dora_event) => { /* handle dora input, etc. */ }
            MergedEvent::External(_tick) => { /* handle external event */ }
        }
    }
});

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl<'a, E, F, S> MergeExternal<'a, F> for S
where S: Stream<Item = MergedEvent<E>> + Unpin + 'a, E: 'a, F: 'a,

Source§

impl<'a, E> MergeExternal<'a, E> for EventStream
where E: 'static,