#枚举 #特性 #对象 #实现 #包装器 #被包装 #管理

no-std trait_enum

一个简单的枚举包装器,实现了被包装对象的所有特性

6 个版本 (破坏性更新)

0.5.0 2020 年 8 月 31 日
0.4.0 2020 年 8 月 31 日
0.3.0 2019 年 3 月 15 日
0.2.0 2018 年 12 月 20 日
0.1.0 2018 年 4 月 6 日

#1888Rust 模式

Download history 451/week @ 2024-03-13 438/week @ 2024-03-20 409/week @ 2024-03-27 400/week @ 2024-04-03 605/week @ 2024-04-10 455/week @ 2024-04-17 667/week @ 2024-04-24 556/week @ 2024-05-01 446/week @ 2024-05-08 616/week @ 2024-05-15 348/week @ 2024-05-22 538/week @ 2024-05-29 285/week @ 2024-06-05 264/week @ 2024-06-12 353/week @ 2024-06-19 529/week @ 2024-06-26

1,547 每月下载量
k8s-ares 中使用

MIT 许可证

10KB
203

特性枚举

Build Status

用于具有相同特性的类型的枚举包装器

trait_enum 宏生成一个管理多个对象的 enum

这些对象预期具有相同的特性实现

之后,枚举将具有一个 std::ops::Deref 实现返回对该特性的引用。

#[macro_use]
extern crate trait_enum;

pub trait CommonTrait {
    fn test(&self) -> u32;
}

pub struct InnerOne;
impl CommonTrait for InnerOne {
    fn test(&self) -> u32 {
        1
    }
}

pub struct InnerTwo;
impl CommonTrait for InnerTwo {
    fn test(&self) -> u32 {
        2
    }
}

trait_enum!{
    pub enum Combined: CommonTrait {
        InnerOne,
        InnerTwo,
    }
}

fn main() {
    use std::ops::Deref;

    let combined = Combined::InnerOne(InnerOne);
    let deref: &dyn CommonTrait = combined.deref();
    assert_eq!(deref.test(), 1);

    let combined = Combined::InnerTwo(InnerTwo);
    let deref: &dyn CommonTrait = combined.deref();
    assert_eq!(deref.test(), 2);
}

无运行时依赖

特性