hicc-std 0.2.0

Based on hicc's ability to provide rust with the ability to call c++ standard container class interfaces
Documentation
use std::env;
use std::fs;
use std::path::Path;

fn main() {
    let Ok(out) = env::var("OUT_DIR") else {
        panic!("not found $OUT_DIR");
    };
    let mut build = hicc_build::Build::new();
    let mut path = Path::new(&out).join("include");
    let _ = fs::create_dir_all(path.as_os_str());
    let include = path
        .canonicalize()
        .unwrap_or_else(|_| panic!("not found dir: $OUT_DIR/include"));
    println!("cargo:include={}", include.to_str().unwrap());
    build.include(include);
    path.push("hicc");
    path.push("std");

    let src = Path::new(".").join("src");
    let files = [
        ("std_string.rs", "string.hpp"),
        ("std_vector.rs", "vector.hpp"),
        ("std_array.rs", "array.hpp"),
        ("std_deque.rs", "deque.hpp"),
        ("std_queue.rs", "queue.hpp"),
        ("std_stack.rs", "stack.hpp"),
        ("std_list.rs", "list.hpp"),
        ("std_forward_list.rs", "forward_list.hpp"),
        ("std_set.rs", "set.hpp"),
        ("std_map.rs", "map.hpp"),
        ("std_unordered_set.rs", "unordered_set.hpp"),
        ("std_unordered_map.rs", "unordered_map.hpp"),
    ];

    for file in files {
        let mut src = src.clone();
        src.push(file.0);
        let mut hdr = path.clone();
        hdr.push(file.1);
        println!("cargo::rerun-if-changed={:?}", src.as_os_str());
        build.cpp_header(src, hdr);
    }
    build.rust_file("src/lib.rs");
    build.compile("hicc_std_cc");
    println!("cargo::rustc-link-lib=hicc_std_cc");
    println!("cargo::rustc-link-lib=stdc++");
    println!("cargo::rerun-if-changed=src/lib.rs");
}