pub fn command_loop(
    commands: &Vec<Command<'_>>,
    context: Option<&[&str]>
) -> Result<(), Box<dyn Error>>
Expand description

Runs the actual command loop, providing readline output via rustyline. The context arg allows for the passing of additional ‘context’ information to maintain a state during subcalls if needed.

Examples found in repository?
examples/conversation.rs (line 34)
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
fn converse(args: &[&str], _context: Option<&[&str]>)->Result<String, Box<dyn Error>>{
    if args.len() == 0 {
        return Ok("no name provided".to_string());
    }
    println!("interacting with: {}", args[0]);
    let commands = vec![
        Command{command: "hello", func: hello, help_output: "hello - say hello"},
        Command{command: "yes", func: yes, help_output: "yes - reply yes"},
        Command{command: "no", func: no, help_output: "no - reply no"},
    ];

    // passing the arguments for the converse commands as context
    // to the commands in the next command loop for reference
    if let Err(e) = command_loop(&commands, Some(args)){
        eprintln!("error running interact command loop: {}", e);
    }
    Ok(String::new())
}

fn main(){
    let commands = vec![
        Command{
            command: "converse",
            func: converse,
            help_output: "converse <name> - interact with a person"
        },
    ];

    // start the command loop with the provided commands
    if let Err(e) = command_loop(&commands, None){
        eprintln!("error running command loop: {}", e.to_string());
    }
}