Skip to content

Commit 84f7df8

Browse files
committed
Add serialize feature to bevy_core
1 parent 89b3422 commit 84f7df8

File tree

4 files changed

+48
-1
lines changed

4 files changed

+48
-1
lines changed

crates/bevy_core/Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ bevy_utils = { path = "../bevy_utils", version = "0.9.0-dev" }
2020

2121
# other
2222
bytemuck = "1.5"
23+
serde = { version = "1.0", optional = true }
24+
25+
[features]
26+
serialize = ["dep:serde"]
2327

2428
[dev-dependencies]
2529
crossbeam-channel = "0.5.0"

crates/bevy_core/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
//! This crate provides core functionality for Bevy Engine.
33
44
mod name;
5+
#[cfg(feature = "serialize")]
6+
mod serde;
57
mod task_pool_options;
68

79
use bevy_ecs::system::Resource;

crates/bevy_core/src/serde.rs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
use std::{
2+
any,
3+
fmt::{self, Formatter},
4+
};
5+
6+
use serde::{
7+
de::{Error, Visitor},
8+
Deserialize, Deserializer, Serialize, Serializer,
9+
};
10+
11+
use super::name::Name;
12+
13+
impl Serialize for Name {
14+
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15+
serializer.serialize_str(self.as_str())
16+
}
17+
}
18+
19+
impl<'de> Deserialize<'de> for Name {
20+
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21+
deserializer.deserialize_str(EntityVisitor)
22+
}
23+
}
24+
25+
struct EntityVisitor;
26+
27+
impl<'de> Visitor<'de> for EntityVisitor {
28+
type Value = Name;
29+
30+
fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
31+
formatter.write_str(any::type_name::<Name>())
32+
}
33+
34+
fn visit_str<E: Error>(self, v: &str) -> Result<Self::Value, E> {
35+
Ok(Name::new(v.to_string()))
36+
}
37+
38+
fn visit_string<E: Error>(self, v: String) -> Result<Self::Value, E> {
39+
Ok(Name::new(v))
40+
}
41+
}

crates/bevy_internal/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ wav = ["bevy_audio/wav"]
4545
# Enable watching file system for asset hot reload
4646
filesystem_watcher = ["bevy_asset/filesystem_watcher"]
4747

48-
serialize = ["bevy_input/serialize", "bevy_time/serialize", "bevy_window/serialize", "bevy_transform/serialize", "bevy_math/serialize"]
48+
serialize = ["bevy_core/serialize", "bevy_input/serialize", "bevy_time/serialize", "bevy_window/serialize", "bevy_transform/serialize", "bevy_math/serialize"]
4949

5050
# Display server protocol support (X11 is enabled by default)
5151
wayland = ["bevy_winit/wayland"]

0 commit comments

Comments
 (0)