ormer 0.2.16

A minimalist ORM framework that supports SQLite, PostgreSQL, MySQL, and SqlServer
use std::{env, fs, path::Path};

/// 生成集成测试模块清单:tests/all/ 下除 main.rs 与 _test_common.rs 外的
/// 每个 .rs 文件都会作为模块编入统一的测试二进制,新增测试文件无需登记。
/// 模块声明经 include! 展开后相对其所在文件(OUT_DIR)解析路径,
/// 因此这里直接写入绝对路径。
fn main() {
    println!("cargo:rerun-if-changed=tests/all");
    let manifest_dir = env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR not set");
    let manifest_dir = manifest_dir.replace('\\', "/");
    let mut mods: Vec<String> = fs::read_dir(Path::new(&manifest_dir).join("tests/all"))
        .expect("tests/all directory missing")
        .filter_map(|entry| {
            let path = entry.ok()?.path();
            let name = path.file_name()?.to_str()?.to_owned();
            if !name.ends_with(".rs") || name == "main.rs" || name == "_test_common.rs" {
                return None;
            }
            Some(name.trim_end_matches(".rs").to_owned())
        })
        .collect();
    mods.sort();
    let mut generated =
        String::from("// @generated by build.rs:按 tests/all 目录内容自动生成,勿手改\n");
    for m in &mods {
        generated.push_str(&format!(
            "#[path = \"{manifest_dir}/tests/all/{m}.rs\"]\nmod {m};\n"
        ));
    }
    let out_dir = env::var_os("OUT_DIR").expect("OUT_DIR not set");
    fs::write(Path::new(&out_dir).join("all_tests.rs"), generated).expect("write all_tests.rs");
}