#dhall #serde #serialization

serde_dhall

Dhall对serde的支持

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编码

Download history 2521/week @ 2024-03-14 3858/week @ 2024-03-21 4759/week @ 2024-03-28 3952/week @ 2024-04-04 4496/week @ 2024-04-11 2661/week @ 2024-04-18 2433/week @ 2024-04-25 3405/week @ 2024-05-02 3581/week @ 2024-05-09 5233/week @ 2024-05-16 3001/week @ 2024-05-23 4449/week @ 2024-05-30 3677/week @ 2024-06-06 2449/week @ 2024-06-13 3082/week @ 2024-06-20 1915/week @ 2024-06-27

12,133 每月下载量
少于 9 crates 中使用

BSD-2-Clause

400KB
9K SLoC

Dhall Logo

crates.io documentation CI status coverage status dependency status

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 许可协议许可(LICENSEhttps://opensource.org/licenses/BSD-2-Clause

依赖关系

~6–21MB
~290K SLoC