use serde::Deserialize;
use std::{collections::HashMap, env, fs, path::Path};
fn main() {
let out_dir = env::var_os("OUT_DIR").unwrap();
let out_dir = Path::new(&out_dir);
let cargo_toml: CargoToml = toml::from_str(include_str!("Cargo.toml")).unwrap();
let maud = cargo_toml.dependencies.get("maud").unwrap();
let version = maud.version();
fs::write(out_dir.join("maud.txt"), version).unwrap();
println!("cargo::rerun-if-changed=build.rs,Cargo.toml");
}
#[derive(Deserialize)]
struct CargoToml {
dependencies: HashMap<String, PackageManifest>,
}
#[derive(Deserialize)]
#[serde(untagged)]
enum PackageManifest {
Version(String),
Manifest { version: String },
}
impl PackageManifest {
const fn version(&self) -> &str {
match self {
Self::Version(version) => version.as_str(),
Self::Manifest { version } => version.as_str(),
}
}
}