#串行通信 #收据接收器 #串行 #收据验证器

无 std ebds

实现 EBDS 串行通信协议的消息和相关类型

10 个版本

新增 0.4.2 2024年8月22日
0.4.1 2023年8月18日
0.3.0 2023年8月17日
0.2.1 2023年8月10日
0.1.2 2023年5月30日

#48 in 无标准库

MIT 许可证

475KB
10K SLoC

EBDS 串行协议

本库实现了 EBDS 串行协议消息以及与收据接收器设备通信的相关类型。

当前支持的消息已在本库的各个模块中实现,并包含多个消息中使用的某些通用类型。

如果添加新的消息,请遵循以下模式:在 ...Command(主机发起)消息中,将 <message-type>/command.rs 文件中的 ...Reply(设备发起)消息放在 <message-type>/reply.rs 文件中。

有一些例外,例如当文档中的类型不遵循 Command/Reply 命名约定时。

在这种情况下,省略后缀以帮助与 EBDS 规范进行比较的可读性。

存在一些简单的宏,用于在各个消息类型上实现特性。所有消息类型都应该实现 MessageOps,所有回复类型都应该实现 OmnibusReplyOps

MessageOps 可以使用辅助宏 impl_message_ops! 实现,例如对于新的 SomeNewReply 消息

use crate::impl_message_ops;

pub struct SomeNewReply {
    // For the example, we are just using a number for the length.
    // In real implementations, please add a constant to the `len` module.
    buf: [u8; 11],
}

impl_message_ops!(SomeNewReply);

这将实现 MessageOps 特性为 SomeNewReply,并提供了所有关联函数。特性是 Rust 实现多态的方式,类似于 Go 的 interface 和 C++ 的 template,但有重要的区别。

所有宏实现都位于 src/macros.rs

std 一起使用

默认情况下,此库与 no-std 兼容。要使用仅 std 的功能,请将 std 功能添加到依赖项中

ebds = { version = "0.1", features = ["std"] }

依赖项

~2.6–4MB
~80K SLoC