6个版本

0.1.6 2023年6月23日
0.1.5 2023年6月19日
0.1.4 2022年5月11日
0.1.1 2022年1月26日

#725 in 编码

每月下载量:47

MIT 许可证

93KB
2.5K SLoC

Serde DBUS

这个crate是全新编写的,目前正处于“开发中”阶段,是一个正在进行中的项目。它还不支持DBus的所有功能。请在使用前进行彻底测试,并且请随时提交错误报告或MR。

这个crate的目标是为DBus消息格式提供Serde支持。实际上发送消息不在本crate的范围内。这个crate可以与更完整的消息系统(如zbus)一起使用,作为其捆绑的zvariant serde实现的替代品。明确来说,这是一个为DBus格式全新实现的Serde,而不是zvariant的分支。

这个crate与zvariant的主要区别在于,这个crate旨在支持将Rust结构体序列化为DBus结构体(例如,具有像(iis)这样的签名)或DBus字典(具有a{sv}的签名)作为等价的一级选项。 zvariant使用具有特殊名称的特殊结构体来完成此操作,但serde_dbus可以通过配置整体默认值(例如,所有具有命名字段的struct成为dict,而所有元组struct成为struct)或基于每个情况的配置列表来配置。

这意味着可以使用相同的Serialize实例创建DBus字典和JSON字典,这是zvariant中存在的问题,而这个crate正是为了解决这个问题而存在的。

作为重新实现的一个副作用,与zvariant中那样作为带外数据传递整个结构的签名不同,这个crate要求使用SerializerPolicy来提供必要的外带数据。由于serde的限制,特别是这个bug,serde 不会修复,使用SerializerPolicy将是必要的,以提供数组的项签名(否则它们将默认使用变体并成为av)。

截至目前,这尚未实现,因此目前只支持av签名。这是一个已知问题,将在未来的版本中解决。

反序列化器在任何情况下都不需要任何带外信息。

迄今为止,性能尚未成为主要考虑因素,而是首先实现一个可用的版本,然后后续再解决性能问题。

序列化将只支持小端,但反序列化将必须支持两种端序。

依赖项

~3-16MB
~193K SLoC