lime-main-loop 0.1.0

Main loop.
Documentation
#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)]
pub(crate) enum Action {
    Update = 0,
    Render = 1,
    Log = 2,
}

impl Action {
    pub(crate) const COUNT: usize = 3;

    pub(crate) fn values() -> ActionValues {
        ActionValues { prev: None }
    }
}

pub(crate) struct ActionValues {
    prev: Option<Action>,
}

impl Iterator for ActionValues {
    type Item = Action;

    fn next(&mut self) -> Option<Self::Item> {
        self.prev = match self.prev {
            None => Some(Action::Update),
            Some(Action::Update) => Some(Action::Render),
            Some(Action::Render) => Some(Action::Log),
            Some(Action::Log) => None,
        };

        self.prev
    }
}

#[test]
fn test_action_values() {
    assert_eq!(Action::COUNT, Action::values().count());

    for (idx, action) in Action::values().enumerate() {
        assert_eq!(idx, action as usize);
    }
}