}
}
+struct Context<'c> {
+ hippo: &'c MNode,
+ metadata: &'c Metadata,
+}
+
+impl Context<'_> {
+ fn emit_for_package(&self, package: &str, versions: &[&str]) {
+ let pkg = self.hippo.dependencies.iter()
+ .map(|i| self.metadata.package(i))
+ .find(|i| i.name == package).expect("no nix in hippotat's deps");
+
+ let pkg = &pkg.version;
+ let pkg: semver::Version = pkg.parse().expect(pkg);
+
+ for test in versions {
+ let cfg = test.replace('.', "_").replace(">=", "ge_");
+ let test: semver::VersionReq = test.parse().unwrap();
+ if test.matches(&pkg) {
+ println!("cargo:rustc-cfg={package}_{cfg}");
+ }
+ }
+ }
+}
+
fn main(){
let x = Command::new("cargo")
.args(["metadata", "--format-version=1"])
let hippo = metadata.resolve.nodes.iter()
.find(|n| n.id == hippo.id).expect("no hippotat in nodes!");
- let nix = hippo.dependencies.iter()
- .map(|i| metadata.package(i))
- .find(|i| i.name == "nix").expect("no nix in hippotat's deps");
+ let ctx = Context { hippo, metadata: &metadata };
- let nix = &nix.version;
- let nix: semver::Version = nix.parse().expect(nix);
- for test in [">=0.27", ">=0.28"] {
- let cfg = test.replace('.', "_").replace(">=", "ge_");
- let test: semver::VersionReq = test.parse().unwrap();
- if test.matches(&nix) {
- println!("cargo:rustc-cfg=nix_{cfg}");
- }
- }
+ ctx.emit_for_package("nix", &[">=0.27", ">=0.28"]);
}