summaryrefslogtreecommitdiff
path: root/src/executor.rs
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2025-09-19 22:59:22 +0800
committerlittleblack111 <littleblack11111@gmail.com>2025-09-20 23:34:15 +0800
commitc7a2788158628d3445f0f3574a0d7adfabd0a755 (patch)
tree0c0e973b70f07cd4797b60bd17ca6d4b8e0f348d /src/executor.rs
parent6511f6aaf68c3ab3bce10cdd743936b28e45dfa9 (diff)
init
Diffstat (limited to 'src/executor.rs')
-rw-r--r--src/executor.rs19
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()
+ }
+}