use std::path::PathBuf;
fn main() {
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-changed=Cargo.toml");
println!("cargo:rerun-if-changed=../Cargo.toml");
println!("cargo:rerun-if-changed=../../python/pyproject.toml");
let nautilus_version = "2.0.0rc5";
if let Some(pyproject_version) = try_read_pyproject_version() {
assert!(
pyproject_version.starts_with(nautilus_version),
"Version mismatch: pyproject.toml={pyproject_version}, hardcoded={nautilus_version}",
);
}
println!("cargo:rustc-env=NAUTILUS_VERSION={nautilus_version}");
println!("cargo:rustc-env=NAUTILUS_USER_AGENT=NautilusTrader/{nautilus_version}");
}
fn try_read_pyproject_version() -> Option<String> {
let crate_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
let path = crate_dir
.parent()
.and_then(|p| p.parent())
.map(|p| p.join("python/pyproject.toml"))?;
if path.exists()
&& let Ok(contents) = std::fs::read_to_string(path)
&& let Ok(value) = toml::from_str::<toml::Value>(&contents)
&& let Some(version) = value
.get("project")
.and_then(|p| p.get("version"))
.and_then(|v| v.as_str())
{
return Some(version.to_string());
}
None
}