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
结构体,它还导出Measure
和NumericUnion
类。
所有导出的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