#functional #heterogeneous #hlist #list #plausible

pl-hlist

提供对异构列表(称为HList)的支持,它是一种功能性强、类型安全的元组类似数据结构,可以包含不同类型的数据元素。

2个稳定版本

1.0.1 2020年6月28日
1.0.0 2019年9月13日

#1501数据结构


用于 rcodec

MIT 许可证

10KB
132 代码行

pl-hlist

Build Status Crates.io Docs.rs MIT licensed

这个Rust库提供对异构列表(称为HList)的支持。一个HList是一个功能性强、类型安全的元组类似数据结构,可以包含不同类型的数据元素。

这个库有三个层级

  • HConsHNil类型组成的基本HList数据结构。
  • 一个用于从一系列元素构建HListhlist!宏。
  • 一个用于结构体的HListSupport插件/属性,当声明为结构体时,允许轻松地将结构体实例转换为/从HList表示形式。

下一节将详细介绍这些层级的用法。

用法

在您的Cargo.toml中添加依赖项

[dependencies]
pl-hlist = "1.0"

然后在您的crate中

use pl_hlist::*;

可以手动按如下方式构建一个HList

let x: HCons<u8, HCons<u32, HNil>> = HCons(1u8, HCons(666u32, HNil));

hlist!宏提供了构建HList的方便快捷方式

let x: HCons<u8, HCons<u32, HNil>> = hlist!(1u8, 666u32);

可以将自定义的HListSupport derive 属性应用于结构体声明,以自动实现将该结构体转换为/从HList表示形式的支持

#[derive(HListSupport)]
struct TestStruct {
    foo: u8,
    bar: u32
}

let hlist0 = hlist!(1u8, 666u32);
let s = TestStruct::from_hlist(hlist0);
assert_eq!(s.foo, 1u8);
assert_eq!(s.bar, 666u32);
let hlist1 = s.into_hlist();
assert_eq!(hlist0, hlist1);

许可证

pl-hlist是在MIT许可证下分发的。请参阅LICENSE以获取更多详细信息。

依赖项

~1.5MB
~36K SLoC