12 个版本 (5 个重大更新)

新版本 0.7.0 2024年8月19日
0.6.8 2024年7月22日
0.6.0 2024年5月28日
0.5.2 2024年4月11日
0.1.0 2024年3月22日

#67 in 配置

Download history 2/week @ 2024-05-17 148/week @ 2024-05-24 20/week @ 2024-05-31 6/week @ 2024-06-07 2/week @ 2024-06-14 4/week @ 2024-06-28 21/week @ 2024-07-05 469/week @ 2024-07-19 53/week @ 2024-07-26 3/week @ 2024-08-02 104/week @ 2024-08-16

每月下载量 175

MIT-0 许可证

150KB
3.5K SLoC

BarkML

BarkML 是一种声明式配置格式,灵感来源于 toml、hcl 等其他语言。最初是为了与操作工具和生成工具一起使用而创建的。语言默认使用 utf-8 解析,并且支持自引用宏替换。

语言规范

语句

控制语句

控制语句通常用于指定与文件、部分或块相关的元数据。它们是从以 $ 开头的任何变量开始的赋值语句。

语法

$<name> = (!<label>)? <value>

示例

$control_id = !MyProgram 1.0.0

上面的示例可以用来定义 barkml 使用的是哪种模式。注意,目前 BarkML 中没有直接实现模式检查,它是在使用 BarkML 的工具的编写者定义和检查模式。

部分

BarkML 中的数据最顶层分组是部分。部分看起来与 TOML 中的部分相同。不过与 TOML 不同,BarkML 不允许嵌套部分。部分旨在作为配置文件中的全局分组。

语法

[<name>|"<name>"]
<child-statements...>

示例

[section-a]
foo = "bar"

["section-b"]
foo = "baz"

注意:如果配置文件的用途是发送到网络或出于某种原因流式传输到服务,应避免使用部分,因为如果发送的数据被截断,它仍然可能是一个有效的 BarkML 文件。在这种情况下,应使用下面定义的块来分组语句。

注释

BarkML 支持通过定义以 # 开头后跟一个空格开始的行来定义注释。任何连续的带有 # 的行都将被连接成多行注释。

语法

# <any text without a newline>
# <...>

示例

# This is a comment in BarkML

BarkML 支持将一组语句分组和标记为块。这些块可以与 0 或多个任何值类型的标签相关联。如果您希望在宏中检索或引用块或从 walker 类中,作用域 ID 将始终是 id 加上所有标签,用 '.' 连接。

语法

<id> [<label>] {
  <child-statements...>
}

赋值

标准的赋值语句将定义单个数据条目。与控制语句一样,值也可以有一个可选的标签,这有助于工具声明值的类型。

语法

[<id> | "<id>"] = (!<label>)? <value>

示例

foo = "bar"
"baz" = 3.14

整数

整数指定为数值,除非提供了后缀,否则将按有符号 64 位数字读取。可以使用以下后缀指定具有精度的数字:

后缀 精度
u8 无符号 8 字节
u16 无符号16字节
u32 无符号32字节
u64 无符号64字节
u128 无符号128字节
i8 有符号8字节
i16 有符号16字节
i32 有符号32字节
i64 有符号64字节
i128 有符号128字节

示例

5
-2
5u32
-2i64

浮点数

默认情况下,浮点数以64字节浮点数读取,除非提供以下后缀之一。浮点数也可以指定指数。

后缀 精度
f32 32字节
f64 64字节

示例

3.14
3.14f32
-5.2
5.2e10
5.2e+10
3.1e-10
30.0E+2

语义版本

BarkML支持内联语义版本声明。然而,为了避免与浮点数冲突,任何语义版本都必须指定至少...

示例

1.0.0
0.1.0-beta.1
0.1.0-prerelease-build.5

语义版本要求

BarkML还支持定义版本要求。唯一例外是,目前不支持显式支持通配符 '*'(如果不指定版本的所有部分,它仍然会被推断出来)。您还必须在barkml中始终指定要求运算符。

>1.1
^4
~5.3

字符串值

字符串可以用单引号或双引号定义。两者都被有效地解析为相同。

示例

'my-string'
"my string value"

字节数据

BarkML支持通过base64编码的字节字符串存储随机字节数据。为了避免配置文件之间使用base64的标准产生混淆,BarkML将预期URL安全且无填充的base64数据标准化。这个rust crate将自动将任何Vec<u8>数据编码和解码为此编码标准。

示例

# binarystring in base64
b'YmluYXJ5c3RyaW5n'

标签

标签值是以!为前缀的标识符。这些主要用于赋值语句或控制语句之前的值,但也可以单独用作符号值。

示例

!MyLabel

布尔值

BarkML支持在配置文件中使用多个标识符来定义布尔值

真值选项

  • true
  • TRUE
  • yes
  • YES
  • on
  • ON

假值选项

  • false
  • FALSE
  • no
  • NO
  • off
  • OFF

空值

BarkML还支持使用多个标识符来定义空值

选项

  • null
  • 空值
  • NULL
  • nil
  • NIL
  • none
  • NONE

数组

BarkML支持动态数组,这意味着任何数组的子条目类型不必匹配。数组始终用[]包装,并可以包含由逗号分隔的0个或多个值

示例

[5, 3.14, 'foo']

BarkML还支持定义表

示例

{
  foo = 5,
  "bar" = 3.14
}

宏替换

BarkML支持使用自引用宏。这些宏在解析时将查找并用之前定义的值替换值。这些宏值必须通过配置文件顶部的根路径引用数据。宏替换是完整替换

示例

version = "1.0.0"
[section]
val = 5
[section-b]
parent-version = m!version
other-val = m!section.val

宏字符串

BarkML还允许在字符串声明中使用宏替换。宏字符串可以通过在字符串中使用{}来定义一个或多个替换

version = "1.0.0"
motd = m'Hello from {version}'

注意:宏字符串只能使用单引号

安全

有关更多信息,请参阅CONTRIBUTING

许可

此库根据MIT-0许可证授权。请参阅LICENSE文件。

依赖项

~4.5MB
~62K SLoC