1pub use async_trait::async_trait;
2
3use crate::flow::Flow;
4use crate::task::TaskId;
5use crate::value::Value;
6use std::sync::Arc;
7
8pub type Error = Box<dyn std::error::Error + Sync + Send>;
9
10#[async_trait]
11pub trait JobLoader: Sync + Send {
12 async fn task(
13 &self,
14 task_id: Arc<dyn TaskId>,
15 flow: Arc<Flow>,
16 ) -> Result<Box<dyn TaskLoader>, Error>;
17}
18
19#[async_trait]
20pub trait TaskLoader: Sync + Send {
21 async fn stage(&self, stage_id: &str) -> Result<Box<dyn StageLoader>, Error>;
22}
23
24#[async_trait]
25pub trait StageLoader: Sync + Send {
26 async fn load(&mut self, size: usize) -> Result<Vec<(String, Value)>, Error>;
27}