aide/
features.rs

1use run_script::ScriptOptions;
2mod rs_files;
3
4pub fn with_script(args: &Vec<String>, mode: &str, file_name: &str) {
5    let options = ScriptOptions::new();
6    if !mode.is_empty() {
7        let code_name :&str = &format!("{}_{}", file_name, mode);
8        let rs_code = rs_files::get_rs(code_name);
9        let set_file = format!("echo '{}'", rs_code);
10        let cmd_echo = format!("echo '{}' > {}.rs", rs_code, file_name);
11        let cargo_script = format!("cargo script {}.rs", file_name);
12        let rm_script = format!("rm -rf {}.rs", file_name);
13        //dbg!(&rs_code);
14        //dbg!(&cargo_script);
15        //let cmds = format!("{}", &set_file);
16        let cmds = format!(
17            "{}\n{}\n{}\n{}",
18            &set_file, &cmd_echo, &cargo_script, &rm_script
19        );
20        let (_code, output, error) = run_script::run(&cmds, &args, &options).unwrap();
21        //println!("Exit Code: {}\n\n", code);
22        println!("{}\n\n", output);
23        println!("Compiler: Output Info  >>>>>>>>>>>>>> :\n\n{}", error);
24    } else {
25        //
26    }
27}
28
29/*
30pub fn with_mode(args: &Vec<String>, mode: &str, file_name: &str) {
31    let options = ScriptOptions::new();
32    let rs_file: &str = &format!("RS_FILE=./examples/{}.rs", file_name);
33    let cmd_cargo;
34    // cargo run --bin bw -- -f kw_let -m error | bat -l rs
35    // cargo run --bin bw -- --file kw_let --mode ok
36    // cargo run --bin bw -- --file kw_let --mode err
37    // is equal to
38    // # cargo run --example kw_let --features ok
39    // # cargo run --example kw_let --features err
40    cmd_cargo = format!("cargo run --example {} --features '{}'", file_name, mode);
41    dbg!(&cmd_cargo);
42    let cmds = format!("{}\n{}\n{}", rs_file, &cmd_cargo, RUM_CMD_BAT);
43    let (_code, output, error) = run_script::run(&cmds, &args, &options).unwrap();
44    //println!("Exit Code: {}\n\n", code);
45    println!("{}\n\n", output);
46    println!("Compiler: Output Info  >>>>>>>>>>>>>> :\n\n{}", error);
47}
48*/
49
50pub fn without_mode(args: &Vec<String>, file_name: &str) {
51    let options = ScriptOptions::new();
52    let cmd_cargo;
53    match file_name.as_ref() {
54        "bwx" => {
55            // cargo run --bin bw -- -f bwx
56            // # cargo run --bin bwx            
57            cmd_cargo = format!("cargo run --bin {}", file_name);
58            dbg!(&cmd_cargo);
59            let cmds = format!("{}", &cmd_cargo);
60            let (_code, output, error) = run_script::run(&cmds, &args, &options).unwrap();
61            println!("{}", output);
62            dbg!(error);
63        }
64        _ => {
65            println!("\n\nList commands with all features for this code {}:\n", file_name);
66            for item in rs_files::FEATURE_MODE.iter() {
67                let code_name = &format!("{}_{}", file_name, item);
68                let result = rs_files::get_rs(code_name);
69                if result != rs_files::HELLO {
70                    println!("bw -c {} -f {} | bat -l rs", file_name, item);
71                    //println!("cargo run --bin bw -- -c {} -f {} | bat -l rs\n", file_name, item);
72                }
73            }
74            
75            // # cargo run --bin bwx allx
76            // # cargo run --bin bwx devx
77
78            //cmd_cargo = format!("cargo run --bin bwx {}", file_name);
79            //let cmds = format!("{}", &cmd_cargo);
80            //let (_code, output, error) = run_script::run(&cmds, &args, &options).unwrap();
81            //println!("{}", output);
82            //dbg!(error);
83        }
84    }
85}
86
87//const RUM_CMD_BAT: &str = r#"bat $RS_FILE"#;
88
89// https://doc.rust-lang.org/rust-by-example/std_misc/arg/matching.html
90// https://doc.rust-lang.org/rust-by-example/flow_control/match.html
91
92// 题外话
93// https://doc.rust-lang.org/rust-by-example/flow_control/match.html
94// https://stackoverflow.com/questions/25383488/how-to-match-a-string-against-string-literals-in-rust