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§
Required Methods§
Sourcefn merge_external(
self,
external_events: impl Stream<Item = E> + Unpin + 'a,
) -> Box<dyn Stream<Item = Self::Item> + Unpin + 'a>
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".