1use ::Entity;
2use std::any::Any;
3
4pub struct EntityBuilder(Entity);
5
6impl EntityBuilder {
7 pub fn create(label: String) -> EntityBuilder {
8 EntityBuilder(Entity::new(label))
9 }
10
11 pub fn create_str(label: &str) -> EntityBuilder {
12 EntityBuilder(Entity::new(String::from(label)))
13 }
14
15 pub fn add<T: Any>(mut self, component: T) -> EntityBuilder {
16 self.0.components.insert(component);
17 self
18 }
19
20 pub fn tag(mut self, key: &'static str, value: String) -> EntityBuilder {
21 self.0.tags.insert(key, value);
22 self
23 }
24
25 pub fn build(self) -> Entity {
26 self.0
27 }
28}
29
30#[cfg(test)]
31mod tests {
32 use super::*;
33
34 #[test]
35 fn entity_can_be_built() {
36 let entity = EntityBuilder::create_str("test").build();
37 assert_eq!(entity.label(), "test");
38 }
39
40 #[test]
41 fn entity_add_adds_a_component() {
42 let entity = EntityBuilder::create_str("test").add("String").build();
43 assert_eq!(entity.label(), "test");
44 assert_eq!(entity.components.get::<&str>(), Some(&"String"));
45 }
46
47 #[test]
48 fn entity_tag_adds_a_tag() {
49 let entity = EntityBuilder::create_str("test").tag("key", String::from("value")).build();
50 assert_eq!(entity.label(), "test");
51 assert_eq!(entity.tags.get("key"), Some(&String::from("value")));
52 }
53}