vanadin_tasks/modules/
env.rs

1use 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}