dag_flow/
task.rs

1use futures::future::BoxFuture;
2use futures::future::Shared;
3
4#[trait_variant::make(Send + Sync)]
5#[dynosaur::dynosaur(pub DynTask = dyn(box) Task)]
6pub trait Task<I, D> {
7    fn id(&self) -> &I;
8
9    fn dependencies(&self) -> &[I] {
10        &[]
11    }
12
13    async fn run(&self, input: Vec<Input<'_, I, D>>) -> Option<D>;
14}
15
16#[derive(Clone, Debug)]
17pub struct Input<'a, I, D> {
18    pub id: I,
19    pub data: Shared<BoxFuture<'a, Option<D>>>,
20}
21
22impl<'a, I, D> Input<'a, I, D> {
23    pub fn new(id: I, data: Shared<BoxFuture<'a, Option<D>>>) -> Self {
24        Self { id, data }
25    }
26}