diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2025-09-19 22:59:22 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2025-09-20 23:34:15 +0800 |
| commit | c7a2788158628d3445f0f3574a0d7adfabd0a755 (patch) | |
| tree | 0c0e973b70f07cd4797b60bd17ca6d4b8e0f348d /src/executor.rs | |
| parent | 6511f6aaf68c3ab3bce10cdd743936b28e45dfa9 (diff) | |
init
Diffstat (limited to 'src/executor.rs')
| -rw-r--r-- | src/executor.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/executor.rs b/src/executor.rs new file mode 100644 index 0000000..9f66ec3 --- /dev/null +++ b/src/executor.rs @@ -0,0 +1,19 @@ +use crate::tasks::{CompletedTask, IntoTaskErr, Task, TaskOutput}; + +pub struct Executor<'a, 't> { + task: &'t Task, + args: Box<[&'a str]>, + complete_task: Option<CompletedTask>, +} + +impl<'a, 't> Executor<'a, 't> { + pub fn new(task: &'t Task, 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() + } +} |
