vanadin_tasks/modules/
process.rs

1use rquickjs::module::{Declarations, Exports, ModuleDef};
2use rquickjs::{Ctx, Function};
3
4pub struct Module;
5
6impl ModuleDef for Module {
7    #[inline(always)]
8    fn declare(declarations: &mut Declarations) -> rquickjs::Result<()> {
9        declarations.declare("cmd")?;
10        declarations.declare("exit")?;
11        declarations.declare("id")?;
12
13        Ok(())
14    }
15
16    #[inline(always)]
17    fn evaluate<'js>(ctx: &Ctx<'js>, exports: &mut Exports<'js>) -> rquickjs::Result<()> {
18        exports.export("cmd", Function::new(ctx.clone(), Self::cmd))?;
19        exports.export("exit", Function::new(ctx.clone(), Self::exit))?;
20        exports.export("id", Function::new(ctx.clone(), Self::id))?;
21
22        Ok(())
23    }
24}
25
26impl Module {
27    #[inline(always)]
28    fn cmd(program: String, args: Vec<String>) -> Option<i32> {
29        std::process::Command::new(program)
30            .args(args)
31            .spawn()
32            .ok()?
33            .wait()
34            .ok()?
35            .code()
36    }
37
38    #[inline(always)]
39    fn exit(code: i32) {
40        std::process::exit(code);
41    }
42
43    #[inline(always)]
44    fn id() -> u32 {
45        std::process::id()
46    }
47}