vanadin_tasks/modules/
process.rs1use 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}