1mod action;
2mod element;
3mod filter;
4mod producer;
5
6use element::Element;
7use futures::StreamExt; use crate::result::Result;
10
11type Elements<'a> = futures::stream::BoxStream<'a, Element>;
12
13pub struct Work<'a> {
14 elements: Elements<'a>,
15}
16
17impl<'a> Work<'a> {
18 pub fn new() -> Self {
19 Self {
20 elements: futures::stream::empty().boxed(),
21 }
22 }
23
24 pub async fn execute(self) -> Result<()> {
25 self.elements
26 .for_each(|x| async move {
27 drop(x);
28 })
29 .await;
30
31 Ok(())
32 }
33
34 pub(crate) fn add_work<Adder>(self, adder: Adder) -> Result<Work<'a>>
35 where
36 Adder: FnOnce(Elements<'a>) -> Elements<'a>,
37 {
38 Ok(Self {
39 elements: adder(self.elements),
40 })
41 }
42}