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