A simple command-line menu system in Rust. Works on embedded systems, but also on your command-line.
NOTE: This crates works only in &str
- there's no heap allocation, but
there's also no automatic conversion to integers, boolean, etc.
``console
user@host: ~/menu $ cargo run --example simple
Compiling menu v0.2.0 (file:///home/user/menu)
Finished dev [unoptimized + debuginfo] target(s) in 0.84 secs
Running
target/debug/examples/simple`
In enter_root()
help AVAILABLE ITEMS: foo [ ] [ --verbose ] [ --level=INT ] - Makes a foo appear. bar - fandoggles a bar sub - enter sub-menu help [
] - Show this help, or get help on a specific command.
help foo SUMMARY: foo [ ] [ --verbose ] [ --level=INT ]
DESCRIPTION: Makes a foo appear.
This is some extensive help text.
It contains multiple paragraphs and should be preceeded by the parameter list.
foo --level=3 --verbose 1 2 In selectfoo. Args = ["--level=3", "--verbose", "1", "2"] a = Ok(Some("1")) b = Ok(Some("2")) verbose = Ok(Some("")) level = Ok(Some("3")) nosuch_arg = Err(())
foo Error: Insufficient arguments given!
foo 1 2 3 3 Error: Too many arguments given
sub
/sub> help
AVAILABLE ITEMS:
baz - thingamobob a baz
quux - maximum quux
exit - Leave this menu.
help [
exit
help AVAILABLE ITEMS: foo [ ] [ --verbose ] [ --level=INT ] - Makes a foo appear. bar - fandoggles a bar sub - enter sub-menu help [
] - Show this help, or get help on a specific command.
^C user@host: ~/menu $ ```
See examples/simple.rs
for a working example that runs on Linux or Windows. Here's the menu definition from that example:
```rust const ROOTMENU: Menutype: ItemType::Callback { function: selectfoo, parameters: &[ Parameter::Mandatory { parametername: "a", help: Some("This is the help text for 'a'"), }, Parameter::Optional { parametername: "b", help: None, }, Parameter::Named { parametername: "verbose", help: None, }, Parameter::NamedValue { parametername: "level", argumentname: "INT", help: Some("Set the level of the dangle"), }, ], }, command: "foo", help: Some( "Makes a foo appear.
This is some extensive help text.
It contains multiple paragraphs and should be preceeded by the parameter list. ", ), }, &Item { itemtype: ItemType::Callback { function: selectbar, parameters: &[], }, command: "bar", help: Some("fandoggles a bar"), }, &Item { itemtype: ItemType::Menu(&Menu { label: "sub", items: &[ &Item { itemtype: ItemType::Callback { function: selectbaz, parameters: &[], }, command: "baz", help: Some("thingamobob a baz"), }, &Item { itemtype: ItemType::Callback { function: selectquux, parameters: &[], }, command: "quux", help: Some("maximum quux"), }, ], entry: Some(entersub), exit: Some(exitsub), }), command: "sub", help: Some("enter sub-menu"), }, ], entry: Some(enterroot), exit: Some(exit_root), };
```
pancurses