parent
b711eff13d
commit
57ae564fd7
6 changed files with 97 additions and 20 deletions
@ -0,0 +1,55 @@ |
|||||||
|
use std::process::{ |
||||||
|
Command, |
||||||
|
Output |
||||||
|
}; |
||||||
|
|
||||||
|
pub type JobResult<'res> = Result<&'res [u8], &'res [u8]>; |
||||||
|
|
||||||
|
pub trait Job { |
||||||
|
async fn run(&mut self); |
||||||
|
fn result(&self) -> JobResult; |
||||||
|
} |
||||||
|
|
||||||
|
pub struct ShellJob<'cmd> { |
||||||
|
pub result: JobResult<'cmd>, |
||||||
|
pub cmd: &'cmd str, |
||||||
|
pub args: Vec<&'cmd str> |
||||||
|
} |
||||||
|
|
||||||
|
impl ShellJob { |
||||||
|
pub fn from_raw(raw_cmd: &str) -> Self { |
||||||
|
let cmd_parts = raw_cmd.split(" "); |
||||||
|
Self { |
||||||
|
cmd: cmd_parts[0], |
||||||
|
args: cmd_parts[1..], |
||||||
|
result: Err("Did not run".as_bytes()) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
impl Job for ShellJob { |
||||||
|
async fn run(&mut self) { |
||||||
|
let result = Command::new(self.cmd) |
||||||
|
.args(&self.args) |
||||||
|
.output(); |
||||||
|
self.result = match result { |
||||||
|
Ok(output) => { |
||||||
|
if output.status != 0 { |
||||||
|
Err(&output.stderr) |
||||||
|
} else { |
||||||
|
Ok(&output.stdout) |
||||||
|
} |
||||||
|
} |
||||||
|
Err(e) => e.to_string().as_bytes() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
fn result(&self) -> JobResult { |
||||||
|
self.result |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/* |
||||||
|
pub struct PyJob { |
||||||
|
|
||||||
|
}*/ |
Loading…
Reference in new issue