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 无标准库
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