#codec #meter #power #message #sml #parser #smart

无std sm-ls

用Rust编写的智能消息语言(SML)解析器

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编码

Download history 232/week @ 2024-04-20 152/week @ 2024-04-27 7/week @ 2024-05-04 282/week @ 2024-05-11 2/week @ 2024-05-18 342/week @ 2024-05-25 185/week @ 2024-06-01 203/week @ 2024-06-08 376/week @ 2024-06-15 562/week @ 2024-06-22 252/week @ 2024-06-29 211/week @ 2024-07-06 172/week @ 2024-07-13 143/week @ 2024-07-20 292/week @ 2024-07-27 2/week @ 2024-08-03

每月628次下载

MIT/Apache

150KB
3K SLoC

sml-rs

Crate Info API Docs CI Maintenance

sm-ls

用Rust编写的智能消息语言(SML)解析器。

现代德国电力表定期通过光接口发送SML编码的数据。此库的主要用途是对这些数据进行解码。

状态: 此库已准备好使用!我们仍在对其进行改进,未来可能会有破坏性更改,但现在的基本功能(传输编码/解码、解析)处于良好状态。有关实现状态的详细信息,请参阅“实现状态”部分,并请告诉我们您对库的看法!评论、反馈、问题、功能请求欢迎!

设计目标

以下列表显示了指导库开发的目标。虽然我们还没有全部实现它们,但目标是最终实现。对目标的反馈非常受欢迎。

  • 实用性: 此库的主要目的是在从电力表读取SML数据时无缝工作。实用性包括设计可访问的API,抵制过于花哨的诱惑,并为有缺陷的电力表实现解决方案。

  • 重点: 此库仅实现了电力表中实际使用的SML子集,因此可以对其进行测试。

  • 正确性: 实现符合SML V1.04规范(见下文)。唯一的例外是针对电力表错误的解决方案(见“实用性”)。库仅返回完整且正确的数据(通过CRC校验和验证)。

  • 效率: 实现应尽可能高效,只要这不与前面的目标冲突。

  • 可靠性: 即使提供不规范/恶意数据,库也不会崩溃/恐慌。每个错误都已在API中建模,以便库的用户可以决定如何处理错误。库不使用unsafe Rust。

  • 完整性:该库提供了对解析的 SML 数据结构中所有数据成员的访问。它以不会丢失信息的方式提供数据(例如,由于整型到浮点型的转换)。

  • 可测试性:该库旨在实现良好的测试覆盖率,包括单元测试以及使用真实世界的数据。

  • 易学性:该库应该易于使用,包括优秀的示例和文档。

  • 灵活性:API 应该允许多样化的使用案例(例如,仅解码传输层;仅解析;使用简化 API 一次性完成所有操作等)。

  • 嵌入式友好性:该库在 no_std 环境中运行,并且可以在不使用分配器的情况下使用。

  • DevOps 友好性:尽可能地限制了依赖。非必要依赖被功能门控。这提供了良好的编译时间和更少的供应链攻击表面。

  • 非目标

    • 实现完整的 SML 规范,尽管它目前没有被使用。
    • 实现 SML 文件的编码(主要因为我们没有使用案例。如果您需要编码 SML 数据,请告诉我们!)

规范

实现状态

  • 传输 v1
    • 编码
    • 流编码
    • 解码
    • 流解码
  • 解析
    • 完整(使用分配)
    • 流(无分配兼容)
  • no_std / no_alloc 支持
  • 高级 API 吗?
  • 出色的文档和示例(部分完成)
  • 对 panic 路径的审查(可能是工具辅助)。
  • ...

许可证

根据您的选择,许可协议为 Apache 许可证,版本 2.0MIT 许可证
除非您明确声明,否则您有意提交给该 crate 的任何贡献,根据 Apache-2.0 许可证定义,应按上述方式双重许可,不附加任何额外条款或条件。

依赖