#lattice #macro #merge #derive #generics #field #lattice-ord

lattices_macro

lattices crate 提供过程宏

1 个不稳定版本

0.5.5 2024年7月23日

1576过程宏

Download history 144/week @ 2024-07-21 12/week @ 2024-07-28

每月 下载量 156
4 个crate中使用(通过 lattices

Apache-2.0

21KB
466

#[derive(Lattice)]

多个格子的结构可以形成一个 格子。这种情况的最简单例子是 Pair 格子,它是两个子格子的积。对于两个以上的格子,或者为了提高可读性,用户可以创建自己的积格子结构体,其中每个字段都是一个子格子,并使用 #[derive(Lattice)] 宏来自动推导格子特性。

推导 MergePartialEqPartialOrdLatticeOrdIsBotIsTopLatticeFrom,因此也推导了 Lattice。或者可以单独推导特性:#[derive(Merge, LatticeOrd, IsBot, IsTop, LatticeFrom)]。注意,LatticeOrd 也推导了 PartialEqPartialOrd

请注意,所有字段必须是格类型。如果任何字段不能是格类型,则 where 子句将阻止特质的实现编译。

这些 derive 宏将创建一组通用的泛型,以允许不同类型之间的转换和合并。例如,给定以下结构体

#[derive(Lattice)]
struct MyLattice<KeySet, Epoch>
where
    KeySet: Collection,
    Epoch: Ord,
{
    keys: SetUnion<KeySet>,
    epoch: Max<Epoch>,
}

将创建以下形式的 derive 宏 impl

impl<KeySet, Epoch, KeySetOther, EpochOther>
    Merge<MyLattice<KeySetOther, EpochOther>> for MyLattice<KeySet, Epoch>
where
    KeySet: Collection,
    Epoch: Ord,
    KeySetOther: Collection,
    EpochOther: Ord,
{
    // ...
}

依赖项

~3MB
~57K SLoC