Expand description

Rushterm

Make your CLI app easy by adding menu. Create nested menus, navigate with hotkeys. Data-driven. No function/macro complexity.

Example

Firstly, we’ll need to construct a Menu instance. Bring Menu and necessary sub types into scope. Menu instance doesn’t need to be mutable. Next, we’ll invoke .run() method on the instance to execute our menu:

use rushterm::{Item, Menu};

fn main() {
    let menu = Menu {
        name: "My Main Menu",
        items: vec![
            Item::Action {
                name: "Action0",
                hotkey: Some('a'),
                exp: Some("Action0 Explanation. This Has Been Assigned To A Hotkey."),
            },
            Item::Action {
                name: "Action1",
                hotkey: None,
                exp: Some("Action1 Explanation. This Has No Hotkey."),
            },
            Item::SubMenu {
                name: "Submenu0",
                hotkey: Some('s'),
                exp: Some("Submenu0 explanation."),
                items: vec![
                    Item::Action {
                        name: "Sub0 Action0",
                        hotkey: Some('a'),
                        exp: Some("Sub Action0 Explanation. This Has Been Assigned To A Hotkey."),
                    },
                    Item::SubMenu {
                        name: "Deepermenu0",
                        hotkey: Some('d'),
                        exp: Some("Deepermenu0 Explanation."),
                        items: vec![
                            Item::Action {
                                name: "Deeper Action0",
                                hotkey: Some('f'),
                                exp: None,
                            },
                            Item::Action {
                                name: "Deeper Action1",
                                hotkey: Some('g'),
                                exp: Some("Deeper Action1 Explanation."),
                            },
                        ],
                    },
                ],
            },
        ],
        exp: Some("My Main Menu Explanation."),
        esc: true,
    };
    let selection = menu.run();
    dbg!(&selection);
}

If selection is successful, run() method will return us a Selection type in Ok() variant to get information we may need in ongoing execution. If not, exits the execution with an Err() variant.

Structs

Starting point for creating a menu instance.

Gives the data of the selection made in the menu.

Enums

Anything that can be listed in a menu.