fir 0.1.0

Tiny decision tree library
Documentation
mod tree;
mod node;

use tree::{Tree};

#[derive(Clone)]
struct State {
    name: &'static str,
    age: i32,
}

fn is_age_over_21(state: State) -> (State, bool) {
    (state.clone(), state.age > 21)
}

fn say_hello(state: State) -> State {
    println!("Hello {}!", state.name);
    state
}

fn say_bye(state: State) -> State {
    println!("Goodbye {}!", state.name);
    state
}

fn reducer(state: State) -> (State, bool) {
    let res = state.name == "Jack";
    (state, res)
}

fn main() {
    let tree = Tree::<State>::close_decision(
        is_age_over_21,
        Tree::<State>::action(
            say_hello,
            Tree::<State>::build_open_decision(
                Tree::<State>::action(
                    say_bye,
                    Tree::<State>::finished()
                )
            ).link(
                reducer,
                Tree::<State>::action(
                    say_hello,
                    Tree::<State>::finished()
                )
            ).build(),
        ),
        Tree::<State>::action(
            say_bye,
            Tree::Finished::<State>
        )
    );

    tree.explore(State {
        name: "Jack",
        age: 35
    });
}