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