pub(crate) trait TaskFunc = FnOnce(u64, u64) -> Result<(), String> + Send + Sync + 'static;
pub struct Task {
pub name: String,
pub deps: Vec<String>,
func: Box<dyn TaskFunc>,
}
impl Task {
pub fn new(name: &str, deps: Vec<&str>, func: Box<dyn TaskFunc>) -> Self {
Self { name: name.into(), deps: deps.iter().map(| d| d.to_string()).collect(), func }
}
pub fn dummy(name: &str, deps: Vec<&str>) -> Self {
Self::new(name, deps, Box::new(|a: u64, b: u64| Ok(())))
}
}
impl Default for Task {
fn default() -> Self {
Self::dummy("default", vec![])
}
}