use std::sync::Arc;
use crate::pipeline::{
DataLoadDataItem,
DataLoadMetaDataItem,
DataLoadOperator,
DataLoadSchedule,
};
#[derive(Debug, Clone)]
pub struct DataLoadPlan<M, T>
where
M: DataLoadMetaDataItem,
T: DataLoadDataItem,
{
pub schedule: DataLoadSchedule<M>,
pub op: Option<Arc<dyn DataLoadOperator<M, T>>>,
}
impl<M, T> DataLoadPlan<M, T>
where
M: DataLoadMetaDataItem,
T: DataLoadDataItem,
{
pub fn new() -> Self {
Self {
schedule: DataLoadSchedule::new(),
op: None,
}
}
pub fn init(
schedule: DataLoadSchedule<M>,
op: Option<Arc<dyn DataLoadOperator<M, T>>>,
) -> Self {
Self { schedule, op }
}
}
impl<M, T> Default for DataLoadPlan<M, T>
where
M: DataLoadMetaDataItem,
T: DataLoadDataItem,
{
fn default() -> Self {
Self::new()
}
}
#[cfg(test)]
mod tests {
use std::sync::Arc;
use super::*;
use crate::pipeline::FnOperator;
#[test]
fn test_index_to_str_plan() {
let schedule: DataLoadSchedule<usize> = vec![3, 1, 2].into();
let load = |idx: &usize| -> anyhow::Result<String> { Ok(format!("i:{idx}")) };
let _plan = DataLoadPlan::init(schedule, Some(Arc::new(FnOperator::new(load))));
}
}