1个稳定版本
使用旧的Rust 2015
1.0.0 | 2023年6月14日 |
---|
#1537 在 解析器实现
25KB
467 行
该obis
包提供了解析器和工具,用于处理IEC 62056-61标准定义的OBIS代码。
该包是no_std
,使其适用于嵌入式环境和物联网用例。
示例
IEC 62056-61定义了两种OBIS代码。一种是包含所有组的完整代码。这种代码并不特别受欢迎,但它是不含糊的,且不需要上下文来解释。为了解析这些代码,请使用Code
类型
use obis::Code;
let input = b"0-0:1.0.0*255";
let (code, _remainder) = Code::parse(input).expect("valid code should parse successfully");
assert_eq!(code.a, 0);
assert_eq!(code.c, 1);
assert_eq!(code.f, 255);
请注意,目前的实现需要使用可能与您的应用程序中使用的不同的分隔符。欢迎提出描述不同用例的问题和更改行为的PR!
附件A中定义了一种简化的OBIS代码。此代码允许省略OBIS代码的某些部分,但这样做会使代码的解释变得上下文相关。例如,您可能需要知道标识符是否来自电表或气表,才能完全解释数据。至少在面向最终用户的世界中,这些代码的使用更为广泛,因此您很可能还想使用ReducedCode
use obis::ReducedCode;
let input = b"0-0:1.0.0(12345)";
let (code, remainder) = ReducedCode::parse(input).expect("valid code should parse successfully");
assert_eq!(code.a(), Some(0));
assert_eq!(code.f(), None);
// groups C and D are mandatory.
assert_eq!(code.c(), 1);
// The remainder can be further parsed as deescribed below.
assert_eq!(remainder, b"(12345)");
请注意,Code::parse
和ReducedCode::parse
都会产生一个未解析的缓冲区余量。这对于应用程序以及处理使用OBIS代码的协议特别有用,因为它们通常会将OBIS代码插入到协议的更广泛语法中。返回余量允许在单次遍历中解析整个数据,而无需首先确定组成部分。
依赖项
~180KB