3 个版本 (稳定)
| 1.0.1 | 2024 年 6 月 26 日 |
|---|---|
| 0.0.1 | 2024 年 6 月 25 日 |
1725 在 Web 编程
18KB
278 行
command-parser
一个简单的库,可以用来解析像 Twitch 上的聊天机器人那样的命令。
命令语法
在此文档中的任何示例中,! 将用作前缀,- 将用作选项前缀。
这个库可以解析的命令可能看起来像这样
!foo arg1"long arg 2" -opt-opt-key1:val1-key2:"long val2"
一个命令由 4 个不同的部分组成
- name: 命令的名称是前缀之后的第一词。在上面的例子中是
foo。 - arguments: 参数是传递给命令的简单字符串。它们是单个单词或用
"包围的空格字符串。在例子中,两个参数是arg1和long arg 2。 - options: 选项是一组单词。它们以前缀
option_prefix开头。例子中只有一个选项opt。 - parameters: 参数是键值对。它们以前缀
option_prefix开头,并用:分隔。键值对中的值可以是单词或用"包围的字符串。在上面的例子中,key1的值是val1,而key2的值是long val2。
转义
由于 " 用于标记长参数和值的边界,因此通常无法将它们包含在参数字符串中。
您可以使用以下方法转义长参数或值
\": 产生 "\\: 产生 \
示例
use std::collections::{HashMap, HashSet};
use command_parser::{Parser, Command};
let p = Parser::new('!', '-');
let command_string = r##"!foo arg1 "long arg 2" -opt -opt -key1:val1 -key2:"long val2""##;
let command = p.parse(command_string).unwrap();
assert_eq!(command.name, "foo");
assert_eq!(command.arguments[1], "long arg 2");
assert!(command.options.contains("opt"));
assert_eq!(command.parameters.get("key2"), Some(&"long val2".to_string()));
依赖项
~275–730KB
~17K SLoC