10个版本
0.4.0 | 2024年6月4日 |
---|---|
0.3.0 | 2023年3月24日 |
0.2.1 | 2023年1月24日 |
0.1.0 | 2023年1月11日 |
0.0.1 | 2022年4月24日 |
#261 在 编码
每月628次下载
150KB
3K SLoC
sm-ls
用Rust编写的智能消息语言(SML)解析器。
现代德国电力表定期通过光接口发送SML编码的数据。此库的主要用途是对这些数据进行解码。
状态: 此库已准备好使用!我们仍在对其进行改进,未来可能会有破坏性更改,但现在的基本功能(传输编码/解码、解析)处于良好状态。有关实现状态的详细信息,请参阅“实现状态”部分,并请告诉我们您对库的看法!评论、反馈、问题、功能请求欢迎!
设计目标
以下列表显示了指导库开发的目标。虽然我们还没有全部实现它们,但目标是最终实现。对目标的反馈非常受欢迎。
-
实用性: 此库的主要目的是在从电力表读取SML数据时无缝工作。实用性包括设计可访问的API,抵制过于花哨的诱惑,并为有缺陷的电力表实现解决方案。
-
重点: 此库仅实现了电力表中实际使用的SML子集,因此可以对其进行测试。
-
正确性: 实现符合SML V1.04规范(见下文)。唯一的例外是针对电力表错误的解决方案(见“实用性”)。库仅返回完整且正确的数据(通过CRC校验和验证)。
-
效率: 实现应尽可能高效,只要这不与前面的目标冲突。
-
可靠性: 即使提供不规范/恶意数据,库也不会崩溃/恐慌。每个错误都已在API中建模,以便库的用户可以决定如何处理错误。库不使用
unsafe
Rust。 -
完整性:该库提供了对解析的 SML 数据结构中所有数据成员的访问。它以不会丢失信息的方式提供数据(例如,由于整型到浮点型的转换)。
-
可测试性:该库旨在实现良好的测试覆盖率,包括单元测试以及使用真实世界的数据。
-
易学性:该库应该易于使用,包括优秀的示例和文档。
-
灵活性:API 应该允许多样化的使用案例(例如,仅解码传输层;仅解析;使用简化 API 一次性完成所有操作等)。
-
嵌入式友好性:该库在
no_std
环境中运行,并且可以在不使用分配器的情况下使用。 -
DevOps 友好性:尽可能地限制了依赖。非必要依赖被功能门控。这提供了良好的编译时间和更少的供应链攻击表面。
-
非目标
- 实现完整的 SML 规范,尽管它目前没有被使用。
- 实现 SML 文件的编码(主要因为我们没有使用案例。如果您需要编码 SML 数据,请告诉我们!)
规范
- SML V1.04 规范 [pdf] [archive.org]smlarchive
实现状态
- 传输 v1
- 编码
- 流编码
- 解码
- 流解码
- 解析
- 完整(使用分配)
- 流(无分配兼容)
- no_std / no_alloc 支持
- 高级 API 吗?
- 出色的文档和示例(部分完成)
- 对 panic 路径的审查(可能是工具辅助)。
- ...
许可证
根据您的选择,许可协议为 Apache 许可证,版本 2.0 或 MIT 许可证。除非您明确声明,否则您有意提交给该 crate 的任何贡献,根据 Apache-2.0 许可证定义,应按上述方式双重许可,不附加任何额外条款或条件。