3个不稳定版本
0.2.1 | 2023年12月10日 |
---|---|
0.2.0 | 2023年12月9日 |
0.1.0 | 2023年12月9日 |
#1782 in 解析器实现
46KB
754 行
Toml Schema
这个crate旨在为TOML提供类似JSON模式的功能
- 模式是用TOML编写的
- 目前支持所有TOML类型
- 参考(和递归模式)尚不支持
这个crate非常新,许多功能尚未完全测试
语法
模式由一个包含 type
键的表表示,其值可以是以下任何一种
string
: 与指定正则表达式匹配的任何字符串int
: 带有可选边界的64位有符号整数float
: 带有可选边界的64位浮点数bool
: 布尔值date
: 日期array
: 与特定模式匹配的值的数组table
: 具有特定键的TOML表alternative
: 子模式的OR运算
如果解析器期望一个模式但未找到 type
键,它将假设类型是 table
,但如果类型不是上述任何一种,解析将失败
对于每种模式类型,都有其他键是必需的或可选的,以提供有关模式的更多详细信息
当模式是 table
模式中的键的值时,也可以提供 default
键,以使该键可选,default
将在其他位置被忽略
任何额外的键都将被忽略(在 table
除外)
字符串
regex
(可选,默认 =/.*/
) : 必须出现在字符串中的正则表达式,如果要匹配整个字符串,请使用 '^' 和 '$'}
整数
浮点数
min
(可选,默认 = f64::NEG_INFINITY) : 允许的最小值max
(可选,默认 = f64::INFINITY): 允许的最大值nan_ok
(可选,默认 =false
): 如果此值为真,则接受 f64::NAN
bool
date
array
child
(必需): 一个数组中所有元素必须匹配的模式min
(可选,默认 =0
): 元素的最小数量max
(可选,默认 = usize::MAX): 元素的最大数量
table
extras
(可选,默认 =[]
): 包含具有key
和schema
键的表的数组,该键定义基于正则表达式的键值对extras[n].key
(必需): 必须出现在键中的正则表达式extras[n].schema
(必需): 必须与值匹配的模式min
(可选,默认 =0
): 额外键的最小数量max
(可选,默认 =0
): 额外键的最大数量
所有其他键都必须是模式,它们定义了必须匹配该模式的表键(如果在此模式中提供了 default
,则为可选)一个 $
被从键的开头移除(如果存在),以允许转义模式关键字。如果您想要以 $
开头的键,请以 $$
等开始...
正在匹配的 TOML 表中的所有键都会与额外键之前的条目进行匹配,这意味着如果键与条目和额外项匹配,则它不会计入额外键的数量,这意味着您可能希望使额外键的正则表达式相互排斥与表条目
alternative
options
(必需): 一个模式数组,如果其中任何一个匹配,则 TOML 值匹配
示例
- 匹配任何表
type = "table"
extras = [{key = ".*", schema = {type = "anything"}}]
- 匹配字符串数组
type = "array"
child = {type = "string"}
- 您可以在 GitHub 上的 "test_files/test_schema.toml" 找到 Cargo.toml 文件的简单模式
计划添加
reference
:指向另一个模式(或模式本身)的链接
依赖关系
~2.4–3.5MB
~66K SLoC