use std::env;
use std::fs;
use std::path::PathBuf;
fn main() {
println!("cargo:rerun-if-changed=Cargo.toml");
let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
let cli_cargo_toml = manifest_dir.join("Cargo.toml");
let content = fs::read_to_string(&cli_cargo_toml).expect("Failed to read Cargo.toml");
let cargo_toml: toml::Value = toml::from_str(&content).expect("Failed to parse Cargo.toml");
let dep_version_full = cargo_toml
.get("package")
.and_then(|p| p.get("metadata"))
.and_then(|m| m.get("lmrc"))
.and_then(|l| l.get("dep-version"))
.and_then(|v| v.as_str())
.expect("package.metadata.lmrc.dep-version not found in Cargo.toml");
let parts: Vec<&str> = dep_version_full.split('.').collect();
let dep_version = if parts.len() >= 2 {
format!("{}.{}", parts[0], parts[1])
} else {
dep_version_full.to_string()
};
let crates = [
"lmrc-gitlab",
"lmrc-hetzner",
"lmrc-k3s",
"lmrc-cloudflare",
"lmrc-postgres",
"lmrc-ssh",
"lmrc-docker",
"lmrc-kubernetes",
"lmrc-pipeline",
"lmrc-http-common",
"lmrc-config-validator",
];
let out_dir = env::var("OUT_DIR").unwrap();
let dest_path = PathBuf::from(out_dir).join("versions.rs");
let mut output = String::new();
output.push_str("// Auto-generated at compile time from Cargo.toml metadata\n");
output.push_str("// DO NOT EDIT MANUALLY\n\n");
for crate_name in &crates {
let const_name = crate_name.replace("-", "_").to_uppercase();
output.push_str(&format!(
"pub const {}_VERSION: &str = \"{}\";\n",
const_name, dep_version
));
}
fs::write(&dest_path, output).expect("Failed to write versions.rs");
}