From 9a77a3b76fd1d4a168d1ea4a06df53292bcaa9f8 Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Mon, 7 Feb 2022 19:58:06 +0100 Subject: [PATCH] Avoid indirect serde_derive dependency for bevy derive proc macros This removes a critical path when building --- crates/bevy_macro_utils/Cargo.toml | 2 +- crates/bevy_macro_utils/src/lib.rs | 36 ++++++++++++++----- .../bevy_reflect_derive/Cargo.toml | 2 +- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/crates/bevy_macro_utils/Cargo.toml b/crates/bevy_macro_utils/Cargo.toml index 5372bab50b8b8..c5a19e5c2fb33 100644 --- a/crates/bevy_macro_utils/Cargo.toml +++ b/crates/bevy_macro_utils/Cargo.toml @@ -9,6 +9,6 @@ license = "MIT OR Apache-2.0" keywords = ["bevy"] [dependencies] -cargo-manifest = "0.2.6" +toml = "0.5.8" syn = "1.0" quote = "1.0" diff --git a/crates/bevy_macro_utils/src/lib.rs b/crates/bevy_macro_utils/src/lib.rs index 4f360a3bd3af6..4883999039dd8 100644 --- a/crates/bevy_macro_utils/src/lib.rs +++ b/crates/bevy_macro_utils/src/lib.rs @@ -8,13 +8,13 @@ pub use attrs::*; pub use shape::*; pub use symbol::*; -use cargo_manifest::{DepsSet, Manifest}; use proc_macro::TokenStream; use quote::quote; use std::{env, path::PathBuf}; +use toml::{map::Map, Value}; pub struct BevyManifest { - manifest: Manifest, + manifest: Map, } impl Default for BevyManifest { @@ -24,7 +24,8 @@ impl Default for BevyManifest { .map(PathBuf::from) .map(|mut path| { path.push("Cargo.toml"); - Manifest::from_path(path).unwrap() + let manifest = std::fs::read_to_string(path).unwrap(); + toml::from_str(&manifest).unwrap() }) .unwrap(), } @@ -36,13 +37,24 @@ impl BevyManifest { const BEVY: &str = "bevy"; const BEVY_INTERNAL: &str = "bevy_internal"; - let find_in_deps = |deps: &DepsSet| -> Option { + fn dep_package(dep: &Value) -> Option<&str> { + if dep.as_str().is_some() { + None + } else { + dep.as_table() + .unwrap() + .get("package") + .map(|name| name.as_str().unwrap()) + } + } + + let find_in_deps = |deps: &Map| -> Option { let package = if let Some(dep) = deps.get(name) { - return Some(Self::parse_str(dep.package().unwrap_or(name))); + return Some(Self::parse_str(dep_package(dep).unwrap_or(name))); } else if let Some(dep) = deps.get(BEVY) { - dep.package().unwrap_or(BEVY) + dep_package(dep).unwrap_or(BEVY) } else if let Some(dep) = deps.get(BEVY_INTERNAL) { - dep.package().unwrap_or(BEVY_INTERNAL) + dep_package(dep).unwrap_or(BEVY_INTERNAL) } else { return None; }; @@ -54,8 +66,14 @@ impl BevyManifest { Some(path) }; - let deps = self.manifest.dependencies.as_ref(); - let deps_dev = self.manifest.dev_dependencies.as_ref(); + let deps = self + .manifest + .get("dependencies") + .map(|deps| deps.as_table().unwrap()); + let deps_dev = self + .manifest + .get("dev-dependencies") + .map(|deps| deps.as_table().unwrap()); deps.and_then(find_in_deps) .or_else(|| deps_dev.and_then(find_in_deps)) diff --git a/crates/bevy_reflect/bevy_reflect_derive/Cargo.toml b/crates/bevy_reflect/bevy_reflect_derive/Cargo.toml index 0cd2722d70380..3663af55af8db 100644 --- a/crates/bevy_reflect/bevy_reflect_derive/Cargo.toml +++ b/crates/bevy_reflect/bevy_reflect_derive/Cargo.toml @@ -17,4 +17,4 @@ bevy_macro_utils = { path = "../../bevy_macro_utils", version = "0.8.0-dev" } syn = { version = "1.0", features = ["full"] } proc-macro2 = "1.0" quote = "1.0" -uuid = { version = "0.8", features = ["v4", "serde"] } +uuid = { version = "0.8", features = ["v4"] }