use std::path::{Path, PathBuf};
fn main() {
let manifest_dir =
std::env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR is set by cargo");
let lock_path = find_cargo_lock(Path::new(&manifest_dir))
.unwrap_or_else(|| panic!("Cargo.lock not found above {manifest_dir}"));
println!("cargo:rerun-if-changed={}", lock_path.display());
println!("cargo:rustc-env=TYPST_VERSION=0.15.0 + custom PDF metadata support");
}
fn find_cargo_lock(start: &Path) -> Option<PathBuf> {
let mut current = Some(start);
while let Some(dir) = current {
let candidate = dir.join("Cargo.lock");
if candidate.is_file() {
return Some(candidate);
}
current = dir.parent();
}
None
}
fn _find_package_version(lock: &str, name: &str) -> Option<String> {
let target_name = format!("name = \"{name}\"");
let mut name_matches = false;
for line in lock.lines() {
let line = line.trim_end();
if line == target_name {
name_matches = true;
} else if name_matches && line.starts_with("version = \"") {
return line
.strip_prefix("version = \"")
.and_then(|rest| rest.strip_suffix('"'))
.map(str::to_owned);
}
}
None
}