1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use std::process::{Command};
use std::env;
use crate::binaries;
use crate::binaries::platform;
use std::path::{PathBuf, Path};

pub fn main(args: &Vec<String>) {
    let dir = binaries::global_cache_dir();

    binaries::fetch_native(dir.clone()).expect("could not fetch binaries");

    let prisma = binaries::prisma_cli_name();

    let mut cmd = Command::new(dir.join(prisma));

    cmd.args(args);

    let binary_name = platform::check_for_extension(
        platform::name(),
        platform::binary_platform_name()
    );

    cmd.envs(env::vars());
    cmd.env("PRISMA_HIDE_UPDATE_MESSAGE", "true");

    for e in &binaries::ENGINES {
        let value: String;

        match env::var(e.env.to_string()) {
            Ok(var) => value = var,
            Err(_) => value = dir
                .join(binaries::ENGINE_VERSION)
                .join(format!("prisma-{}-{}", e.name.to_string(), binary_name))
                .into_os_string().into_string().unwrap()
        }

        cmd.env(e.env.to_string(), value);
    }

    cmd.spawn().unwrap();
}