forklaunch 0.1.0

Launch faster with forklaunch
use std::fs;
use std::path::{Path, PathBuf};

fn copy_templates(src: &Path, dest: &Path) -> std::io::Result<()> {
    if !dest.exists() {
        fs::create_dir_all(dest)?;
    }

    for entry in fs::read_dir(src)? {
        let entry = entry?;
        let path = entry.path();
        let dest_path = dest.join(path.file_name().unwrap());

        if path.is_file() {
            if path.is_symlink() {
                let real_path = fs::read_link(&path)?;
                fs::copy(src.join(real_path), &dest_path)?;
            } else {
                fs::copy(&path, &dest_path)?;
            }
        } else if path.is_dir() {
            copy_templates(&path, &dest_path)?;
        }
    }

    Ok(())
}

fn main() -> std::io::Result<()> {
    let out_dir = PathBuf::from(std::env::var("CARGO_TARGET_DIR").unwrap_or("target".to_string()))
        .join(std::env::var("PROFILE").unwrap_or("debug".to_string()));
    let templates_dir = PathBuf::from("src").join("templates");
    let dest_templates = out_dir.join("templates");

    if dest_templates.exists() {
        fs::remove_dir_all(&dest_templates)?;
    }

    copy_templates(&templates_dir, &dest_templates)?;

    println!("cargo:rerun-if-changed=src/templates");
    Ok(())
}