use epkard::*; #[derive(Clone)] enum MyNode { Small, Large, } struct State { count: usize, } impl Node for MyNode { type State = State; fn next<F>(self, rt: &mut Runtime<Self, F>) -> Control<Self> where F: Frontend, { rt.clear(); rt.println(format!("count: {}\n", rt.count)); match self { MyNode::Small => { // `Runtime::multiple_choice` prompts a user to choose // from one of several choices match rt .multiple_choice("How many do you want to add?", &["1", "2", "3", "more"])? { n if n <= 2 => rt.count += n + 1, _ => return next(MyNode::Large), } } MyNode::Large => { // `Runtime::prompt` prompts a user to enter text let input = rt.prompt("Enter a number to add")?; match input.parse::<usize>() { Ok(i) => rt.count += i, Err(_) => rt.println("Invalid number"), } } } next(MyNode::Small) } } fn main() { run( MyNode::Small, &mut State { count: 0 }, &mut CliFrontend::new(), ); }