1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
use crate::tasks::{CompletedTask, IntoTaskErr, Task, TaskOutput};
pub struct Executor<'a, 't, N: Copy> {
task: &'t Task<N>,
args: Box<[&'a str]>,
complete_task: Option<CompletedTask<N>>,
}
impl<'a, 't, N: Copy> Executor<'a, 't, N> {
pub fn new(task: &'t Task<N>, args: impl IntoIterator<Item = &'a str>) -> Result<Self, IntoTaskErr> {
Ok(Self { task: task, args: args.into_iter().collect(), complete_task: None })
}
pub fn run(&mut self) -> &TaskOutput {
let output = (self.task.exec)(&self.args);
self.complete_task = Some(CompletedTask { name: self.task.name, output: Some(output) });
self.complete_task.as_ref().unwrap().output.as_ref().unwrap()
}
}
|