rgraph 0.2.2

A task graph library.
Documentation
extern crate rgraph;

use rgraph::*;
use std::vec::Vec;

fn main() {
    let mut g = Graph::new();

    g.add_node(create_node!(
                gen_one () -> (one: u32) {
                    println!("              gen one");
                    one = 1u32;
                }
            )).unwrap();

    g.add_node(create_node!(
                plus_one (one: u32) -> (plusone : u32) {
                    println!("              plusone");
                    plusone = one + 1u32;
                }
            )).unwrap();

    g.add_node(create_node!(
                the_one_task  (one: u32, plusone : u32) ->
                              (last_value: f32) {
                    println!("              the one task");
                    last_value = (one + plusone) as f32;
                }
            )).unwrap();

    g.add_node(create_node!(
                list (list : Vec<u32>) -> () {
                    println!("             list");
                }
            )).unwrap();

    g.bind_asset("gen_one::one", "plus_one::one")
        .expect("binding must be doable");
    g.bind_asset("gen_one::one", "the_one_task::one")
        .expect("binding must be doable");
    g.bind_asset("plus_one::plusone", "the_one_task::plusone")
        .expect("binding must be doable");

    let mut cache = ValuesCache::new();

    for _ in 0..10 {
        {
            let mut solver = GraphSolver::new(&g, &mut cache);
            assert!(solver.execute("nop").is_err());

            solver.execute("the_one_task").expect("could not execute");

            println!("{:?}", solver.get_values());

            assert!(
                solver
                    .get_value::<u32>("gen_one::one")
                    .expect("never created?") == 1
            );
            assert!(
                solver
                    .get_value::<u32>("plus_one::plusone")
                    .expect("never created?") == 2
            );
            assert!(
                (solver
                    .get_value::<f32>("the_one_task::last_value")
                    .expect("not cached?") - 3.0)
                    .abs() < 0.01
            );
        }

        assert!(cache.get_value::<u32>("gen_one::one").expect("not cached?") == 1);
        assert!(
            cache
                .get_value::<u32>("plus_one::plusone")
                .expect("not cached?") == 2
        );
        assert!(
            (cache
                .get_value::<f32>("the_one_task::last_value")
                .expect("not cached?") - 3.0)
                .abs() < 0.01
        );
    }
}