From af2a1992549f9ea0a529c80cbf069c40e362b08a Mon Sep 17 00:00:00 2001 From: Zhell Date: Mon, 14 Nov 2022 23:08:22 +0000 Subject: [PATCH] [Fixes #6030] Bevy scene optional serde (#6076) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Objective Fixes #6030, making ``serde`` optional. ## Solution This was solved by making a ``serialize`` feature that can activate ``serde``, which is now optional. When ``serialize`` is deactivated, the ``Plugin`` implementation for ``ScenePlugin`` does nothing. Co-authored-by: Linus Käll --- crates/bevy_internal/Cargo.toml | 2 +- crates/bevy_scene/Cargo.toml | 8 ++++++-- crates/bevy_scene/src/dynamic_scene.rs | 8 +++++++- crates/bevy_scene/src/lib.rs | 8 ++++++++ crates/bevy_scene/src/scene_loader.rs | 3 +++ 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/crates/bevy_internal/Cargo.toml b/crates/bevy_internal/Cargo.toml index 91bc44d2fe..5446f251b1 100644 --- a/crates/bevy_internal/Cargo.toml +++ b/crates/bevy_internal/Cargo.toml @@ -45,7 +45,7 @@ wav = ["bevy_audio/wav"] # Enable watching file system for asset hot reload filesystem_watcher = ["bevy_asset/filesystem_watcher"] -serialize = ["bevy_core/serialize", "bevy_input/serialize", "bevy_time/serialize", "bevy_window/serialize", "bevy_transform/serialize", "bevy_math/serialize"] +serialize = ["bevy_core/serialize", "bevy_input/serialize", "bevy_time/serialize", "bevy_window/serialize", "bevy_transform/serialize", "bevy_math/serialize", "bevy_scene/serialize"] # Display server protocol support (X11 is enabled by default) wayland = ["bevy_winit/wayland"] diff --git a/crates/bevy_scene/Cargo.toml b/crates/bevy_scene/Cargo.toml index 3980816bec..8feb7e1a90 100644 --- a/crates/bevy_scene/Cargo.toml +++ b/crates/bevy_scene/Cargo.toml @@ -8,6 +8,10 @@ repository = "https://github.com/bevyengine/bevy" license = "MIT OR Apache-2.0" keywords = ["bevy"] +[features] +default = ["serialize"] +serialize = ["dep:serde", "uuid/serde"] + [dependencies] # bevy bevy_app = { path = "../bevy_app", version = "0.9.0" } @@ -21,9 +25,9 @@ bevy_utils = { path = "../bevy_utils", version = "0.9.0" } bevy_render = { path = "../bevy_render", version = "0.9.0" } # other -serde = { version = "1.0", features = ["derive"] } +serde = { version = "1.0", features = ["derive"], optional = true } ron = "0.8.0" -uuid = { version = "1.1", features = ["v4", "serde"] } +uuid = { version = "1.1", features = ["v4"] } anyhow = "1.0.4" thiserror = "1.0" diff --git a/crates/bevy_scene/src/dynamic_scene.rs b/crates/bevy_scene/src/dynamic_scene.rs index 29bc8eab02..92f8cae312 100644 --- a/crates/bevy_scene/src/dynamic_scene.rs +++ b/crates/bevy_scene/src/dynamic_scene.rs @@ -1,4 +1,4 @@ -use crate::{serde::SceneSerializer, DynamicSceneBuilder, Scene, SceneSpawnError}; +use crate::{DynamicSceneBuilder, Scene, SceneSpawnError}; use anyhow::Result; use bevy_app::AppTypeRegistry; use bevy_ecs::{ @@ -7,6 +7,10 @@ use bevy_ecs::{ world::World, }; use bevy_reflect::{Reflect, TypeRegistryArc, TypeUuid}; + +#[cfg(feature = "serialize")] +use crate::serde::SceneSerializer; +#[cfg(feature = "serialize")] use serde::Serialize; /// A collection of serializable dynamic entities, each with its own run-time defined set of components. @@ -116,12 +120,14 @@ impl DynamicScene { // TODO: move to AssetSaver when it is implemented /// Serialize this dynamic scene into rust object notation (ron). + #[cfg(feature = "serialize")] pub fn serialize_ron(&self, registry: &TypeRegistryArc) -> Result { serialize_ron(SceneSerializer::new(self, registry)) } } /// Serialize a given Rust data structure into rust object notation (ron). +#[cfg(feature = "serialize")] pub fn serialize_ron(serialize: S) -> Result where S: Serialize, diff --git a/crates/bevy_scene/src/lib.rs b/crates/bevy_scene/src/lib.rs index d00c455ff2..184c2490d8 100644 --- a/crates/bevy_scene/src/lib.rs +++ b/crates/bevy_scene/src/lib.rs @@ -4,6 +4,8 @@ mod dynamic_scene_builder; mod scene; mod scene_loader; mod scene_spawner; + +#[cfg(feature = "serialize")] pub mod serde; pub use bundle::*; @@ -27,6 +29,7 @@ use bevy_ecs::prelude::*; #[derive(Default)] pub struct ScenePlugin; +#[cfg(feature = "serialize")] impl Plugin for ScenePlugin { fn build(&self, app: &mut App) { app.add_asset::() @@ -38,3 +41,8 @@ impl Plugin for ScenePlugin { .add_system_to_stage(CoreStage::PreUpdate, scene_spawner); } } + +#[cfg(not(feature = "serialize"))] +impl Plugin for ScenePlugin { + fn build(&self, _: &mut App) {} +} diff --git a/crates/bevy_scene/src/scene_loader.rs b/crates/bevy_scene/src/scene_loader.rs index 9054c4cf30..2dea805f92 100644 --- a/crates/bevy_scene/src/scene_loader.rs +++ b/crates/bevy_scene/src/scene_loader.rs @@ -5,6 +5,8 @@ use bevy_asset::{AssetLoader, LoadContext, LoadedAsset}; use bevy_ecs::world::{FromWorld, World}; use bevy_reflect::TypeRegistryArc; use bevy_utils::BoxedFuture; + +#[cfg(feature = "serialize")] use serde::de::DeserializeSeed; #[derive(Debug)] @@ -21,6 +23,7 @@ impl FromWorld for SceneLoader { } } +#[cfg(feature = "serialize")] impl AssetLoader for SceneLoader { fn load<'a>( &'a self,