flax 0.7.1

An ergonomic archetypical ECS
Documentation
use flax::{component, components::name, Entity, FetchExt, World};

#[test]
fn entity_access() {
    component! {
        a: i32,
        b: String,
    }

    let mut world = World::new();

    let id = Entity::builder()
        .set(name(), "a".into())
        .set(a(), 5)
        .set(b(), "Foo".into())
        .spawn(&mut world);

    let entity = world.entity(id).unwrap();

    let query = &(name().cloned(), a());
    let query2 = &(name().cloned(), a().as_mut());
    {
        let mut query = entity.query(query);
        assert_eq!(query.get(), Some(("a".into(), &5)));
    }

    {
        let mut query = entity.query(query2);
        *query.get().unwrap().1 += 1;

        assert_eq!(query.get(), Some(("a".into(), &mut 6)));
    }

    let mut query = entity.query(query);
    assert_eq!(query.get(), Some(("a".into(), &6)));
}