4 个版本 (2 个破坏性更新)
0.2.0 | 2024年3月15日 |
---|---|
0.1.1 | 2024年3月7日 |
0.1.0 | 2024年1月2日 |
0.0.0 | 2023年10月16日 |
#416 in 数据结构
用于 2 crates
86KB
1.5K SLoC
适用于任何地方的紧凑且可流式传输的数据格式--从Web应用程序到机器人。
什么是Pact?
Pact 描述了相关类型的 数据 结构,每个结构包含一个或多个 字段。Pact 数据可以编码和解码为原始二进制数据流,这意味着 pact 对构建使用不同语言或依赖低级别网络通信的分布式或嵌入式应用程序非常有帮助。
注意:对于熟悉其他数据交换格式的用户,pacts 与 gRPC 使用的
proto
架构和 Cap'n Proto 使用的capnp
架构有很多相似之处。
pact 中的每个数据类型都可以有以下类型的字段
- 从
8
到64
位的无符号整数 (u8
,u16
,u32
, 和u64
)。 - 从
8
到64
位的有符号整数 (i8
,i16
,i32
, 和i64
)。 - 从
32
到64
位的有符号浮点整数 (f32
和f64)。
- 布尔值 (
bool
)。 - UTF-8 编码的字符串,也称为文本 (
string
)。 - 其他 用户定义的数据类型("嵌套"数据)
- 以上列出的任何事物的列表。
有关如何将 Pact 数据编码为二进制数据以及如何从二进制数据解码 Pact 数据的信息,请参阅 codec
文档。
我该如何创建一个 Pact?
Pact 是使用 TOML 创建的。
## An example pact.
pact = 'MyGreeter'
## Data type in this pact
## named "Request".
[data.1. Request]
message = 'string'
## Another data type in this
## pact named "Response".
[data.2. Response]
message = 'string'
## This field of a Response is a
## list of strings, instead of just
## a single string, because it is
## surrounded by `[]`.
friends = ['string']
## This field of a Response is a
## copy of the request that the
## response is for, showing how
## we can nest other data types
## within data types.
request = 'Request'
以下示例描述了一个包含两种数据(Request
和 Response
)的 MyGreeter
Pact。这两种数据都包含一个 message
字符串,而 Response
数据包含一个名为 friends
的字符串列表以及原始的 Request
的副本。
每个数据描述都从一个称为 序数 的数字开始。序数唯一地标识了同一 Pact 中不同类型的数据。Pact 描述的第一个数据始终具有序数 1
,同一 Pact 中每个额外的数据类型都有一个序数,比上一个数据高一个。
以 ##
开头的注释,紧接在 pact
名称、data
名称或字段名称之前,将作为前述项的文档进行解析。
在您自己的项目中开始使用 TOML Pact 的一种最简单的方法是通过 pact-derive
库。
我可以修改或“进化”一个 Pact 吗?
是的!Pact 数据旨在随着系统需求的改变而进化。
- 可以向任何 Pact 中添加新的数据类型。
- 可以向任何数据类型添加新的字段。
- 可以重命名现有的字段和数据类型。
如果系统收到它不支持的新类型的数据,或者包含它不支持的新字段的数据,则新信息将被优雅地忽略。
相反,如果系统收到缺少新添加字段的 缺失 数据,则缺失的字段将使用默认值优雅地填充。
许可证
版权所有 2024 阿里科恩系统公司。
根据自由软件基金会发布的 GNU Affero 通用公共许可证版本 3 许可。有关更多信息,请参阅 许可证文件。
如果您有任何疑问,请联系 [hello@alicorn.systems
].
依赖关系
~1.5–2.2MB
~49K SLoC