#schema #toml #json-schema #parser

toml_schema

一个用于快速检查TOML数据结构的crate,类似于JSON模式

3个不稳定版本

0.2.1 2023年12月10日
0.2.0 2023年12月9日
0.1.0 2023年12月9日

#1782 in 解析器实现

MIT 协议

46KB
754

Toml Schema

Build

这个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 (可选,默认 = i64::MIN) : 允许的最小值
  • max (可选,默认 = i64::MAX) : 允许的最大值

浮点数

  • min (可选,默认 = f64::NEG_INFINITY) : 允许的最小值
  • max(可选,默认 = f64::INFINITY): 允许的最大值
  • nan_ok(可选,默认 = false): 如果此值为真,则接受 f64::NAN

bool

date

array

  • child(必需): 一个数组中所有元素必须匹配的模式
  • min(可选,默认 = 0): 元素的最小数量
  • max(可选,默认 = usize::MAX): 元素的最大数量

table

  • extras(可选,默认 = []): 包含具有 keyschema 键的表的数组,该键定义基于正则表达式的键值对
  • 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