Struct carboxyl::Sink
+
+ [−]
+
+ [src]
+pub struct Sink<A> { + // some fields omitted +}
An event sink.
+ +This primitive is a way of generating streams of events. One can send +input values into a sink and generate a stream that fires all these inputs +as events:
++// A new sink +let sink = Sink::new(); + +// Make an iterator over a stream. +let mut events = sink.stream().events(); + +// Send a value into the sink +sink.send(5); + +// The stream +assert_eq!(events.next(), Some(5)); ++ +
You can also feed a sink with an iterator:
++sink.feed(20..40); +assert_eq!(events.take(4).collect::<Vec<_>>(), vec![20, 21, 22, 23]); ++ +
Asynchronous calls
+It is possible to send events into the sink asynchronously using the methods
+send_async
and feed_async
. Note though, that this will void some
+guarantees on the order of events. In the following example, it is unclear,
+which event is the first in the stream:
+let sink = Sink::new(); +let mut events = sink.stream().events(); +sink.send_async(13); +sink.send_async(22); +let first = events.next().unwrap(); +assert!(first == 13 || first == 22); ++ +
feed_async
provides a workaround, as it preserves the order of events from
+the iterator. However, any event sent into the sink after a call to it, may
+come at any point between the iterator events.
Methods
impl<A: Send + Sync> Sink<A>
fn new() -> Sink<A>
+Create a new sink.
+fn stream(&self) -> Stream<A>
+Generate a stream that fires all events sent into the sink.
+impl<A: Send + Sync + Clone + 'static> Sink<A>
fn send_async(&self, a: A)
+Asynchronous send.
+ +Same as send
, but it spawns a new thread to process the updates to
+dependent streams and signals.
fn feed<I: IntoIterator<Item=A>>(&self, iterator: I)
+Feed values from an iterator into the sink.
+ +This method feeds events into the sink from an iterator.
+fn feed_async<I: IntoIterator<Item=A> + Send + 'static>(&self, iterator: I)
+Asynchronous feed.
+ +This is the same as feed
, but it does not block, since it spawns the
+feeding as a new task. This is useful, if the provided iterator is large
+or even infinite (e.g. an I/O event loop).
fn send(&self, a: A)
+Send a value into the sink.
+ +When a value is sent into the sink, an event is fired in all dependent +streams.
+