extern crate shred;
use shred::{DispatcherBuilder, Read, ReadExpect, System, World, Write};
#[derive(Debug, Default)]
struct ResA;
#[derive(Debug)]
struct ResB;
struct ResWithoutSensibleDefault {
magic_number_that_we_cant_compute: u32,
}
struct PrintSystem;
impl<'a> System<'a> for PrintSystem {
type SystemData = (
Read<'a, ResA>,
Option<Write<'a, ResB>>,
ReadExpect<'a, ResWithoutSensibleDefault>,
);
fn run(&mut self, data: Self::SystemData) {
let (a, mut b, expected) = data;
println!("{:?}", &*a);
if let Some(ref mut x) = b {
println!("{:?}", &**x);
**x = ResB;
}
println!(
"Yeah, we have our magic number: {}",
expected.magic_number_that_we_cant_compute
);
}
}
fn main() {
let mut resources = World::empty();
let mut dispatcher = DispatcherBuilder::new()
.with(PrintSystem, "print", &[]) .build();
dispatcher.setup(&mut resources);
resources.insert(ResWithoutSensibleDefault {
magic_number_that_we_cant_compute: 42,
});
dispatcher.dispatch(&resources);
resources.insert(ResB);
dispatcher.dispatch(&resources);
}