crown_jsasm/
context.rs

1/// https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-build-scripts
2#[derive(serde::Serialize, serde::Deserialize)]
3pub struct JsasmContext {
4    feature: String,
5    unix: bool,
6    windows: bool,
7    target_family: String,
8    target_os: String,
9    target_arch: String,
10    target_vendor: String,
11    target_env: String,
12    target_abi: String,
13    target_pointer_width: usize,
14    target_endian: String,
15    target_feature: String,
16}
17
18impl JsasmContext {
19    pub fn new() -> Result<Self, std::env::VarError> {
20        let feature = std::env::var("CARGO_CFG_FEATURE")?;
21        let unix = std::env::var("CARGO_CFG_UNIX").is_ok();
22        let windows = std::env::var("CARGO_CFG_WINDOWS").is_ok();
23        let target_family = std::env::var("CARGO_CFG_TARGET_FAMILY")?;
24        let target_os = std::env::var("CARGO_CFG_TARGET_OS")?;
25        let target_arch = std::env::var("CARGO_CFG_TARGET_ARCH")?;
26        let target_vendor = std::env::var("CARGO_CFG_TARGET_VENDOR")?;
27        let target_env = std::env::var("CARGO_CFG_TARGET_ENV")?;
28        let target_abi = std::env::var("CARGO_CFG_TARGET_ABI")?;
29        let target_pointer_width = std::env::var("CARGO_CFG_TARGET_POINTER_WIDTH")?
30            .parse()
31            .unwrap();
32        let target_endian = std::env::var("CARGO_CFG_TARGET_ENDIAN")?;
33        let target_feature = std::env::var("CARGO_CFG_TARGET_FEATURE")?;
34        Ok(Self {
35            feature,
36            unix,
37            windows,
38            target_family,
39            target_os,
40            target_arch,
41            target_vendor,
42            target_env,
43            target_abi,
44            target_pointer_width,
45            target_endian,
46            target_feature,
47        })
48    }
49}