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