#configuration-language #yaml #serialization #serde

bin+lib syml

SYML 是一种类似于 YAML 的配置语言,但可能更易于使用

14 个不稳定版本 (3 个破坏性更新)

0.4.0 2024年4月26日
0.3.9 2024年4月24日
0.2.1 2024年4月18日
0.1.0 2024年4月16日

#629编码

Download history 988/week @ 2024-04-20 61/week @ 2024-04-27 1/week @ 2024-05-04 8/week @ 2024-07-06

每月下载量 693 次

MIT 许可证

42KB
1K SLoC

Rust 1K SLoC Vim Script 120 SLoC // 0.0% comments

SYML 是一种类似于 YAML 的配置语言,但可能更易于使用

语法(不精确)

  • _ (空白字符)
    / \t
  • 十六进制:
    [0-9A-Fa-f]
  • 换行符:
    \r? \n
    / 文件结束
  • 注释:
    ; (!nl any-char)*
  • 换行符:
    (_ comment? \r? \n)+
    / 文件结束
  • 转义字符:
    \ ( [\\nrt"' \t]
    / x hex{2}
    / u (hex{4} / { hex+ })
    / U hex{8}
    )
  • 忽略字符串:
    \ comment? \r? \n _
  • 简单值:
    ([!#$%&()*+./0-9<=>?@A-Z\\^_`a-z|~\p{XID_Start}] / - ! )
    [!#$%&()*+./0-9<=>?@A-Z\\^_`a-z|~\-'\p{XID_Continue}]*
    / ' [^'\r\n]* '
    / " str_ignore* ((escape / [^\r\n\\]) str_ignore*)* "
  • 内联值:
    [ _ (simple-val (_ , _ simple-val)* _ ,?)? _ ]
    / { _ (simple-val _ : _ inline-value (_ , simple-val _ : _ inline-value)* _ ,?)? _ }
    / simple-val
  • 列表:
    - ivalue \n (cnl indent(+2) - ivalue(+2))*
  • ivalue:
    列表
    / 简单值 _ : (_ 简单值 _ :)* (
    cnl() (缩进列表(+0) / 缩进(+2) ivalue(+2))
    / 内联值
    )
    / 内联值
  • :
    cnl()? ivalue(0) cnl()

示例

- name: jack
  age: 18
- name: jones
  age: 21
  ids:
  - - 1
    - 2
  - [3, 4] ; inline

类似于JSON5

[
    {
        name: "jack",
        age: "18",
    },
    {
        name: "jones",
        age: "21",
        ids: [
            [1, 2],
            [3, 4],
        ]
    }
]

如何使用

使用命令行工具

cargo install syml --features cli-utils

使用库

let _value = syml::parser::value(r#"
; comment
- {a: 1, b: 2}
- [3, 4]
- 5
- x: 2
  y: 3
"#).unwrap();

依赖关系

~96–385KB