vanadin_tasks/modules/
env.rs1use rquickjs::module::{Declarations, Exports, ModuleDef};
2use rquickjs::{Ctx, Function, Value};
3
4use crate::js::cast_to_string;
5
6pub struct Module;
7
8impl ModuleDef for Module {
9 #[inline(always)]
10 fn declare(declarations: &mut Declarations) -> rquickjs::Result<()> {
11 declarations.declare("set")?;
12 declarations.declare("get")?;
13 declarations.declare("remove")?;
14 declarations.declare("dir")?;
15 declarations.declare("os")?;
16 declarations.declare("arch")?;
17 declarations.declare("family")?;
18
19 Ok(())
20 }
21
22 #[inline(always)]
23 fn evaluate<'js>(ctx: &Ctx<'js>, exports: &mut Exports<'js>) -> rquickjs::Result<()> {
24 exports.export("set", Function::new(ctx.clone(), Self::set))?;
25 exports.export("get", Function::new(ctx.clone(), Self::get))?;
26 exports.export("remove", Function::new(ctx.clone(), Self::remove))?;
27 exports.export("dir", Function::new(ctx.clone(), Self::dir))?;
28 exports.export("os", Function::new(ctx.clone(), Self::os))?;
29 exports.export("arch", Function::new(ctx.clone(), Self::arch))?;
30 exports.export("family", Function::new(ctx.clone(), Self::family))?;
31
32 Ok(())
33 }
34}
35
36impl Module {
37 #[inline(always)]
38 fn set(key: String, value: Value) {
39 std::env::set_var(key, cast_to_string(&value));
40 }
41
42 #[inline(always)]
43 fn get(key: Value) -> Option<String> {
44 std::env::var(key.get::<String>().expect("Value must be string")).ok()
45 }
46
47 #[inline(always)]
48 pub fn remove(key: String) {
49 std::env::remove_var(key);
50 }
51
52 #[inline(always)]
53 pub fn dir() -> Option<String> {
54 Some(std::env::current_dir().ok()?.to_str()?.to_string())
55 }
56
57 #[inline(always)]
58 pub fn os() -> String {
59 std::env::consts::OS.to_string()
60 }
61
62 #[inline(always)]
63 pub fn arch() -> String {
64 std::env::consts::ARCH.to_string()
65 }
66
67 #[inline(always)]
68 pub fn family() -> String {
69 std::env::consts::FAMILY.to_string()
70 }
71}