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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
use crate::{config, error::CnfError};
use std::process::Command;
use which;
static TOOLBX_EXEC: &str = "toolbox";
pub fn detect() -> bool {
true
}
pub fn run(args: &[String]) -> Result<(), CnfError> {
let toolbx =
which::which(TOOLBX_EXEC).map_err(|_| CnfError::NotFound(TOOLBX_EXEC.to_string()))?;
let cfg = config::get();
let toolbx_name = cfg.toolbx_name;
let mut envargs = vec!["run"];
if !toolbx_name.is_empty() {
envargs.push("-c");
envargs.push(&toolbx_name);
}
for s in args {
envargs.push(s.as_ref());
}
if cfg.verbose {
println!("Args: {:?}", envargs);
println!("Running command in toolbx {}", toolbx_name);
}
let status = Command::new(toolbx)
.args(&envargs)
.status()
.map_err(CnfError::ApplicationError)?;
if status.success() {
Ok(())
} else {
Err(CnfError::Execution {
env: "toolbx".to_string(),
error: status,
})
}
}