#![allow(clippy::match_same_arms)]
use bevy::{
prelude::*,
reflect::{DynamicList, ReflectRef},
utils::HashMap,
};
use serde::{Deserialize, Serialize};
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_startup_system(setup)
.run();
}
#[derive(Reflect)]
pub struct A {
x: usize,
y: Vec<u32>,
z: HashMap<String, f32>,
}
#[derive(Reflect)]
pub struct B;
#[derive(Reflect)]
pub struct C(usize);
#[derive(Reflect)]
pub enum D {
A,
B(usize),
C { value: f32 },
}
#[derive(Reflect, Hash, Serialize, PartialEq, Eq)]
#[reflect(Hash, Serialize, PartialEq)]
pub struct E {
x: usize,
}
#[derive(Reflect, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[reflect_value(PartialEq, Serialize, Deserialize)]
pub enum F {
X,
Y,
}
fn setup() {
let mut z = HashMap::default();
z.insert("Hello".to_string(), 1.0);
let value: Box<dyn Reflect> = Box::new(A {
x: 1,
y: vec![1, 2],
z,
});
match value.reflect_ref() {
ReflectRef::Struct(value) => {
info!(
"This is a 'struct' type with an 'x' value of {}",
value.get_field::<usize>("x").unwrap()
);
}
ReflectRef::TupleStruct(_) => {}
ReflectRef::Tuple(_) => {}
ReflectRef::Enum(_) => {}
ReflectRef::List(_) => {}
ReflectRef::Array(_) => {}
ReflectRef::Map(_) => {}
ReflectRef::Value(_) => {}
}
let mut dynamic_list = DynamicList::default();
dynamic_list.push(3u32);
dynamic_list.push(4u32);
dynamic_list.push(5u32);
let mut value: A = value.take::<A>().unwrap();
value.y.apply(&dynamic_list);
assert_eq!(value.y, vec![3u32, 4u32, 5u32]);
}