bevy/crates/bevy_ecs/hecs/examples/format.rs

38 lines
1.1 KiB
Rust
Raw Normal View History

2020-07-10 08:37:06 +00:00
// modified by Bevy contributors
2020-07-10 04:18:35 +00:00
//! One way to the contents of an entity, as you might do for debugging. A similar pattern could
//! also be useful for serialization, or other row-oriented generic operations.
fn format_entity(entity: hecs::EntityRef<'_>) -> String {
fn fmt<T: hecs::Component + std::fmt::Display>(entity: hecs::EntityRef<'_>) -> Option<String> {
Some(entity.get::<T>()?.to_string())
}
const FUNCTIONS: &[&dyn Fn(hecs::EntityRef<'_>) -> Option<String>] =
&[&fmt::<i32>, &fmt::<bool>, &fmt::<f64>];
let mut out = String::new();
for f in FUNCTIONS {
if let Some(x) = f(entity) {
if out.is_empty() {
out.push_str("[");
} else {
out.push_str(", ");
}
out.push_str(&x);
}
}
if out.is_empty() {
out.push_str(&"[]");
} else {
out.push(']');
}
out
}
fn main() {
let mut world = hecs::World::new();
let e = world.spawn((42, true));
println!("{}", format_entity(world.entity(e).unwrap()));
}