kun_peng 0.7.5

Kun-peng: an ultra-fast, low-memory footprint and accurate taxonomy classifier for all
Documentation
use std::fs;
use std::path::PathBuf;
use std::process::Command;

fn main() {
    // Define the paths and directories
    let workspace_root = PathBuf::from(env!("CARGO_MANIFEST_DIR")).to_path_buf();
    let kr2r_binary = workspace_root.join("target/release/kun_peng");
    let data_dir = workspace_root.join("data");
    let test_dir = workspace_root.join("test_database");

    // Ensure the necessary directories exist
    fs::create_dir_all(&data_dir).expect("Failed to create download directory");
    fs::create_dir_all(&test_dir).expect("Failed to create database directory");

    // Command 1: ./target/release/kun_peng build --download-dir data/ --db test_database
    let build_args = vec![
        "build".to_string(),
        "--download-dir".to_string(),
        data_dir.to_string_lossy().to_string(),
        "--db".to_string(),
        test_dir.to_string_lossy().to_string(),
    ];

    let build_command_str = format!("{} {}", kr2r_binary.to_string_lossy(), build_args.join(" "));
    println!("Executing command: {}", build_command_str);

    let build_output = Command::new(&kr2r_binary)
        .args(&build_args)
        .output()
        .expect("Failed to run kun_peng build command");
    println!(
        "kun_peng build output: {}",
        String::from_utf8_lossy(&build_output.stdout)
    );
    if !build_output.stderr.is_empty() {
        println!(
            "kun_peng build error: {}",
            String::from_utf8_lossy(&build_output.stderr)
        );
    }

    // Command 2: ./target/release/kun_peng direct --db test_database data/COVID_19.fa
    let covid_fa = data_dir.join("COVID_19.fa");
    if !covid_fa.exists() {
        println!(
            "kun_peng error: fasta file {} does not exists",
            covid_fa.to_string_lossy().to_string()
        );
    }
    let direct_args = vec![
        "direct".to_string(),
        "--db".to_string(),
        test_dir.to_string_lossy().to_string(),
        covid_fa.to_string_lossy().to_string(),
    ];

    let direct_command_str = format!(
        "{} {}",
        kr2r_binary.to_string_lossy(),
        direct_args.join(" ")
    );
    println!("Executing command: {}", direct_command_str);

    let direct_output = Command::new(&kr2r_binary)
        .args(&direct_args)
        .output()
        .expect("Failed to run kun_peng direct command");
    println!(
        "kun_peng direct output: {}",
        String::from_utf8_lossy(&direct_output.stdout)
    );
    if !direct_output.stderr.is_empty() {
        println!(
            "kun_peng direct error: {}",
            String::from_utf8_lossy(&direct_output.stderr)
        );
    }
}