9次发布

0.1.9 2020年9月21日
0.1.8 2020年6月4日
0.1.7 2020年5月29日

#1364 in 数据结构


用于 vf-rs

自定义许可证

135KB
639

OM2

这个crate试图基于OM2本体中的单位创建一个Unit结构体,它还导出MeasureNumericUnion类。

所有导出的struct/enums都可以通过Serde进行序列化和反序列化。

use om2::{Unit, Measure, NumericUnion};
let measure = Measure::builder()
    .has_unit(Unit::Hour)
    .has_numerical_value(NumericUnion::Integer(7))
    .build().unwrap();
assert_eq!(measure.has_unit(), &Unit::Hour);
assert_eq!(measure.has_numerical_value(), &NumericUnion::Integer(7));

lib.rs:

这是一个自动生成的包装器,围绕om2:Unit类,附带一些支持的struct/enums/utils。

这里的想法是将单位映射到一个大型的序列化/反序列化Rust枚举中,这样你就不需要事先知道标签/符号,可以直接从单位枚举中获取它

use om2::Unit;

let wh = Unit::WattHour;
assert_eq!(wh.symbol(), Some("W h".to_string()));
assert_eq!(wh.label(), Some("watt hour".to_string()));

请注意,symbol()label()方法返回Option,因为不是所有的枚举值在模式中都定义了这些字段。

这个crate还导出om2:Measure,这对于保存完整的测量值很有用。它默认提供getter,也可以选择包含setter

use om2::{Unit, Measure, NumericUnion};
let measure = Measure::new(7.3 as f64, Unit::Hour);
assert_eq!(measure.has_unit(), &Unit::Hour);
assert_eq!(measure.has_numerical_value(), &NumericUnion::Double(7.3));

请注意,由于没有可用的RDF/XML Rust库能够解析OM2 RDF模式,所以这个库需要首先转换到.ttl格式(这是通过make schema命令完成的,该命令在内部使用rapper命令行工具)。

特性

  • getset_setters - 在生成的struct上实现setter,以便可以通过setter方法就地修改
  • getset_getmut - 在生成的struct上实现可变getter,以便可以通过&mut getter就地修改

请注意,在构建文档时,所有特性都被启用,以便给出库全部能力的概念。

依赖

~1.8–2.5MB
~55K SLoC