cli/scriptengine/
generic_script.rs

1//! # generic_script
2//!
3//! Runs generic scripts for other languages based on provided config.
4//!
5
6#[cfg(test)]
7#[path = "generic_script_test.rs"]
8mod generic_script_test;
9
10use crate::command;
11use crate::error::CargoMakeError;
12use crate::io::delete_file;
13use crate::scriptengine::script_utils::create_script_file;
14
15fn run_file(
16    file: &str,
17    runner: &String,
18    arguments: Option<Vec<String>>,
19    cli_arguments: &mut Vec<String>,
20) -> Result<bool, CargoMakeError> {
21    let mut args = match arguments {
22        Some(values) => values,
23        None => vec![],
24    };
25
26    args.push(file.to_string());
27
28    args.append(cli_arguments);
29
30    let exit_code = command::run_command(runner, &Some(args), false)?;
31    debug!("Executed script, exit code: {}", exit_code);
32
33    Ok(exit_code == 0)
34}
35
36pub(crate) fn execute(
37    script_text: &Vec<String>,
38    runner: String,
39    extension: String,
40    arguments: Option<Vec<String>>,
41    cli_arguments: &Vec<String>,
42    validate: bool,
43) -> Result<bool, CargoMakeError> {
44    let file = create_script_file(script_text, &extension)?;
45
46    let valid = run_file(&file, &runner, arguments, &mut cli_arguments.clone())?;
47
48    delete_file(&file);
49
50    if validate && !valid {
51        error!("Unable to execute script.");
52    }
53
54    Ok(valid)
55}