1个不稳定版本
0.0.16 | 2023年2月18日 |
---|---|
0.0.15 |
|
#1507 在 解析器实现
每月22次下载
用于 2 crates
1.5MB
4K SLoC
包含 (WOFF字体,99KB) fontawesome-webfont.woff,(WOFF字体,78KB) fontawesome-webfont.woff2,(WOFF字体,45KB) open-sans-v17-all-charsets-300.woff2,(WOFF字体,41KB) open-sans-v17-all-charsets-300italic.woff2,(WOFF字体,45KB) open-sans-v17-all-charsets-600.woff2,(WOFF字体,43KB) open-sans-v17-all-charsets-600italic.woff2 等 7个更多。
KFL
一个具有出色错误报告和方便的 derive 宏的 KDL 文件格式解析器。
关于KDL
为了给您一些关于KDL格式的背景信息。这里是一个小例子
foo 1 "three" key="val" {
bar
(role)baz 1 2
}
以下是所有数据注释的描述,这些数据由规范和本指南所描述
foo 1 "three" key="val" { ╮
─┬─ ┬ ───┬─── ────┬──── │
│ │ │ ╰───── property (can be multiple) │
│ │ │ │
│ ╰────┴────────────── arguments │
│ │
╰── node name ├─ node "foo", with
│ "bar" and "baz"
bar │ being children
(role)baz 1 2 │
──┬─ │
╰────── type name for node named "baz" │
} ╯
(注意,属性的顺序并不重要,以及属性与参数的顺序,因此我将参数移动以减少箭头的交集)
用法
此库最常见的用法是使用 derive
和 [parse] 函数
use kfl::Decode;
#[derive(Decode)]
struct Config {
#[kfl(children)]
routes: Vec<Route>,
#[kfl(children)]
plugins: Vec<Plugin>,
}
#[derive(Decode)]
struct Route {
#[kfl(argument)]
path: String,
#[kfl(children)]
subroutes: Vec<Route>,
}
#[derive(Decode)]
struct Plugin {
#[kfl(argument)]
name: String,
#[kfl(property)]
url: String,
}
# fn main() -> miette::Result<()> {
let config = kfl::decode_children::<Config>("example.kdl", r#"
route "/api" {
route "/api/v1"
}
plugin "http" url="https://example.org/http"
"#)?;
# Ok(())
# }
这解析为一个枚举类型的节点向量 Config
,但如果没有声明属性和参数,您也可以将某些节点用作文档的根
#[derive(Decode)]
struct Document {
#[kfl(child, unwrap(argument))]
version: Option<String>,
#[kfl(children)]
routes: Vec<Route>,
#[kfl(children)]
plugins: Vec<Plugin>,
}
let config = kfl::decode_children::<Document>("example.kdl", r#"
version "2.0"
route "/api" {
route "/api/v1"
}
plugin "http" url="https://example.org/http"
"#)?;
有关允许的属性和解析模式的完整参考,请参阅Decode和DecodeScalar的描述。
许可证
根据以下之一获得许可
- Apache License,版本2.0,(./LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(./LICENSE-MIT或http://opensource.org/licenses/MIT),任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在本作品中的任何贡献,应如上双许可,不附加任何额外条款或条件。
依赖项
~1.6–2.5MB
~43K SLoC