9 个不稳定版本

0.5.1 2024 年 8 月 22 日
0.5.0 2024 年 4 月 26 日
0.4.0 2023 年 11 月 16 日
0.3.2 2019 年 8 月 21 日
0.1.1 2018 年 5 月 19 日

48命令行界面

Download history 268/week @ 2024-05-02 514/week @ 2024-05-09 488/week @ 2024-05-16 610/week @ 2024-05-23 486/week @ 2024-05-30 942/week @ 2024-06-06 727/week @ 2024-06-13 685/week @ 2024-06-20 460/week @ 2024-06-27 707/week @ 2024-07-04 737/week @ 2024-07-11 417/week @ 2024-07-18 646/week @ 2024-07-25 756/week @ 2024-08-01 443/week @ 2024-08-08 668/week @ 2024-08-15

每月 2,563 次下载
imxrt-hal 中使用

MIT/Apache

42KB
788

Menu

简介

一个简单的 Rust 命令行菜单系统。适用于嵌入式系统,也适用于您的命令行。

注意:此 crate 只在 &str 中工作 - 没有堆分配,也没有自动转换为整数、布尔值等。

user@host: ~/menu $ cargo run --example simple
   Compiling menu v0.5.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 <a> [ <b> ] [ OPTIONS... ]
  bar
  sub
  help [ <command> ]


> help foo
SUMMARY:
  foo <a> [ <b> ] [ --verbose ] [ --level=INT ]

PARAMETERS:
  <a>
       This is the help text for 'a'
  <b>
       No help text found
  --verbose
       No help text found
  --level=INT
       Set the level of the dangle


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 select_foo. Args = ["--level=3", "--verbose", "1", "2"]
a = Ok(Some("1"))
b = Ok(Some("2"))
verbose = Ok(Some(""))
level = Ok(Some("3"))
no_such_arg = Err(())


> foo
Error: Insufficient arguments given!

> foo 1 2 3 3
Error: Too many arguments given

> sub

/sub> help
AVAILABLE ITEMS:
  baz
  quux
  exit
  help [ <command> ]

> exit

> help
AVAILABLE ITEMS:
  foo <a> [ <b> ] [ OPTIONS... ]
  bar
  sub
  help [ <command> ]


> ^C
user@host: ~/menu $

使用方法

请参阅 examples/simple.rs 以获取在 Linux 或 Windows 上运行的示例。以下是该示例中的菜单定义

const ROOT_MENU: Menu<Output> = Menu {
    label: "root",
    items: &[
        &Item {
            item_type: ItemType::Callback {
                function: select_foo,
                parameters: &[
                    Parameter::Mandatory {
                        parameter_name: "a",
                        help: Some("This is the help text for 'a'"),
                    },
                    Parameter::Optional {
                        parameter_name: "b",
                        help: None,
                    },
                    Parameter::Named {
                        parameter_name: "verbose",
                        help: None,
                    },
                    Parameter::NamedValue {
                        parameter_name: "level",
                        argument_name: "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 {
            item_type: ItemType::Callback {
                function: select_bar,
                parameters: &[],
            },
            command: "bar",
            help: Some("fandoggles a bar"),
        },
        &Item {
            item_type: ItemType::Menu(&Menu {
                label: "sub",
                items: &[
                    &Item {
                        item_type: ItemType::Callback {
                            function: select_baz,
                            parameters: &[],
                        },
                        command: "baz",
                        help: Some("thingamobob a baz"),
                    },
                    &Item {
                        item_type: ItemType::Callback {
                            function: select_quux,
                            parameters: &[],
                        },
                        command: "quux",
                        help: Some("maximum quux"),
                    },
                ],
                entry: Some(enter_sub),
                exit: Some(exit_sub),
            }),
            command: "sub",
            help: Some("enter sub-menu"),
        },
    ],
    entry: Some(enter_root),
    exit: Some(exit_root),
};

变更日志

请参阅 CHANGELOG.md

许可证

此存储库的内容根据 MIT OR Apache 2.0 许可证双授权。这意味着您在重新使用此代码时可以选择 MIT 许可证或 Apache 2.0 许可证。有关每个具体许可证的更多信息,请参阅 LICENSE-MITLICENSE-APACHE。我们的 Apache 2.0 声明可以在 NOTICE 中找到。

除非您明确声明,否则根据 Apache-2.0 许可证定义的任何有意提交以包含在作品中的贡献,均应按上述方式双授权,无需任何额外条款或条件。

无运行时依赖