25个版本
0.12.1 | 2023年2月1日 |
---|---|
0.12.0 | 2022年8月15日 |
0.11.2 | 2022年6月24日 |
0.11.0 | 2022年1月1日 |
0.2.0 | 2019年12月24日 |
#613 在 编码 中
12,133 每月下载量
在 少于 9 crates 中使用
400KB
9K SLoC
Dhall是一种可编程的配置语言,优化了可维护性。
你可以把Dhall看作:JSON + 函数 + 类型 + 导入
请注意,虽然Dhall是可编程的,但Dhall不是图灵完备的。Dhall的许多功能都利用这个限制来提供更强的安全保证和更强大的工具。
你可以通过访问官方网站了解有关该语言的更多详细信息
dhall-rust
这是Dhall配置语言的Rust实现。它旨在用于在您的应用程序中集成Dhall。
如果您只想将Dhall转换为JSON或YAML,请使用官方工具;说明请参阅 此处。
用法
目前,将Dhall集成到您的应用程序的唯一支持方式是通过 serde_dhall
包,并且只支持解析。
将以下内容添加到您的 Cargo.toml
[dependencies]
serde_dhall = "0.12.1"
读取Dhall文件很容易,并利用了奇妙的 serde
库。
use std::collections::BTreeMap;
// Some Dhall data
let data = "{ x = 1, y = 1 + 1 } : { x: Natural, y: Natural }";
// Deserialize it to a Rust type.
let deserialized_map: BTreeMap<String, u64> = serde_dhall::from_str(data).parse().unwrap();
let mut expected_map = BTreeMap::new();
expected_map.insert("x".to_string(), 1);
expected_map.insert("y".to_string(), 2);
assert_eq!(deserialized_map, expected_map);
dhall
需要 Rust >= 1.60.0
标准合规性
此实现目前支持Dhall标准版本 20.0.0
的多数功能。
主要缺失的功能是导入头。有关其他缺失功能的列表,请参阅 此处。
贡献
本节将介绍如何开始为该项目做出贡献。
设置仓库
要获取此仓库的副本,我们可以运行
$ git clone https://github.com/Nadrieril/dhall-rust.git
但是,我们也可以指出,将仓库分叉到您自己的工作空间是更好的做法。在那里,您可以进行更改并向此仓库提交拉取请求。
在克隆了仓库之后,我们需要更新项目中的 git子模块,即 dhall-lang
。我们可以通过运行以下命令来实现
$ git submodule update --init --recursive
构建和测试
Rust 社区中开发的一个首选方法是使用 rustup
。
可以通过运行以下命令来安装:
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
或者如果您选择使用 nix 工具
$ nix-shell -p rustup
一旦安装了 rustup
,我们就可以通过运行以下命令来让它管理我们的工具链:
$ rustup toolchain install stable
然后我们可以使用 cargo
依赖管理器来管理我们的构建和测试
$ cargo build
$ cargo test -- -q
您还可以通过名称单独运行测试
$ cargo test tests::spec::name_of_test
现在我们可以尽情享受并快乐地贡献了!
测试套件
测试套件使用了来自 dhall-lang 子模块以及本地 dhall/tests
目录中的测试。各种测试将按照 dhall-lang/tests/README.md
中提供的说明进行运行。
如果缺少输出测试文件(一个 fooB.dhall
文件),我们将自动生成它。这在编写新测试时很有用。别忘了将它提交到 git!
如果您不希望某个规范测试失败,但更喜欢新的输出,可以使用带有 --bless
的测试来覆盖结果文件。这种情况在 ui 测试中很常见(见下文),因为我们可能想更改错误的表述。请注意,--bless
参数只接受 spec
测试,如果您同时运行其他测试则不会被识别。
$ cargo test --test spec -- -q --bless
除了常规的 dhall 测试外,我们还会运行 "ui 测试",以确保各种错误的输出保持良好。ui 测试的输出存储在本地 dhall/tests
目录中,即使是来自 dhall-lang 的测试也是如此。它们存储在与相应测试相同的 .txt
文件中。
提交信息
我尽量使提交信息遵循 Conventional Commits 的风格。这意味着提交信息应该以 feat:
、test:
、spec:
、doc:
、fix:
、style:
、refactor:
、chore:
或类似的词缀开头。
应该使用 !
在 :
前来表示破坏性更改。
变更日志
许可协议
根据 2-Clause BSD 许可协议许可(LICENSE 或 https://opensource.org/licenses/BSD-2-Clause)
依赖关系
~6–21MB
~290K SLoC