4个版本

0.1.3 2022年2月28日
0.1.2 2022年2月11日
0.1.1 2022年2月11日
0.1.0 2022年2月11日

Rust模式中排名第2429

MIT授权

2KB

monomo

简单特质单态化crate。特别适合与typetagcrate一起使用。

示例

假设我们有一个特质Foo<T>,我们希望将其单态化以与typetag一起使用,因为我们不能使用泛型特质。

trait Foo<T> {}

// Notice that you don't have to use typetag attribute, 
// and the trait will still be monomorphized. 
// typetag is just good example when you would like to use monomo.
monomo::rphize!(
    #[typetag::serde]
    Foo<i32>
);

上述宏扩展为Foo<i32>的单态化版本。

为了为结构体实现单态化特质,我们可以这样做

// Notice that you don't have to use typetag attribute, 
// and the trait will still be monomorphized. 
// typetag is just good example when you would like to use monomo.
#[monomo::rphize_impl]
#[typetage::serde]
impl Foo<i32> for Bar {
    // ...
}

感谢这个特性,你可以后来将Foo<i32>实现者用作单态化特质对象。

struct BarContainer {
    bars: Vec<monomo::rph!(Foo<i32>)>
}

依赖项

~1.5MB
~36K SLoC