use bevy::prelude::*; use serde::{Deserialize, Serialize}; use crate::prefab::{ComponentBuilder, PrefabAsset}; #[derive(Component, Serialize, Deserialize, Clone)] struct Name { pub name: String, } #[typetag::serde] impl ComponentBuilder for Name { fn build(&self, _entity: &mut EntityCommands, _: &AssetServer) { assert_eq!(self.name, "Test".to_string(), "Name"); } } #[derive(Component, Serialize, Deserialize, Clone)] struct Position { pub pos: Vec3, } #[typetag::serde] impl ComponentBuilder for Position { fn build(&self, _entity: &mut EntityCommands, _: &AssetServer) { assert_eq!(self.pos, Vec3::X, "Position"); } } #[test] fn round_trip_test() { let prefab = PrefabAsset { components: vec![ Box::new(Position { pos: Vec3::X }), Box::new(Name { name: "Test".to_string(), }), ], ..default() }; let serialized = ron::to_string(&prefab); assert!(serialized.is_ok(), "Failed to serialzied"); let deserialize = ron::from_str::(&serialized.unwrap()); assert!(deserialize.is_ok(), "Failed to deserialize"); let loaded_asset = deserialize.unwrap(); assert_eq!( loaded_asset.components.len(), prefab.components.len(), "Prefab's components count do not match" ); }