shred 0.4.2

Dispatches systems in parallel which need read access to some resources, and write access to others.
Documentation
extern crate shred;

use shred::{Fetch, FetchMut, ResourceId, Resources, SystemData};

#[derive(Debug)]
struct ResA;

#[derive(Debug)]
struct ResB;

struct ExampleBundle<'a> {
    a: Fetch<'a, ResA>,
    b: FetchMut<'a, ResB>,
}

impl<'a> SystemData<'a> for ExampleBundle<'a> {
    fn fetch(res: &'a Resources, id: usize) -> Self {
        ExampleBundle {
            a: res.fetch(id),
            b: res.fetch_mut(id),
        }
    }

    fn reads(id: usize) -> Vec<ResourceId> {
        vec![ResourceId::new_with_id::<ResA>(id)]
    }

    fn writes(id: usize) -> Vec<ResourceId> {
        vec![ResourceId::new_with_id::<ResB>(id)]
    }
}

fn main() {
    let mut res = Resources::new();
    res.add(ResA);
    res.add(ResB);


    let mut bundle = ExampleBundle::fetch(&res, 0);
    *bundle.b = ResB;

    println!("{:?}", *bundle.a);
    println!("{:?}", *bundle.b);
}