#proc-macro #attribute #dynamic

vectorize_struct

vectorize_struct 添加了一个过程宏属性,使得可以遍历实现特定 trait 的 Struct 的每个字段的 Trait Object

4 个版本

使用旧的 Rust 2015

0.1.3 2018年9月25日
0.1.2 2018年9月24日
0.1.1 2018年9月24日
0.1.0 2018年9月24日

#8 in #proc-macro-attribute

MIT 许可证

9KB
94

vectorize_struct 添加了一个过程宏属性,使得可以遍历实现特定 trait 的 Struct 的每个字段的 Trait Object。

它仅在 nightly 版本中工作,并需要 #![feature(specialization)]

示例

#![feature(specialization)]

extern crate vectorize_struct;
use vectorize_struct::vectorize_struct;

use std::fmt::{Debug, Display};

#[vectorize_struct(std::fmt::Display, Debug)]
struct Struct {
    i: i32,
    u: u32,
    b: bool,
    s: String,
    buui: (bool, u32, u8, i16),
    s2: String,
    nd: NoDisplay,
}

struct NoDisplay {}

fn main() {
    use vectorized_Struct::*;

    let s = Struct {
        i: -12,
        u: 61,
        b: false,
        s: String::from("asd"),
        buui: (true, 1, 5, -2),
        s2: String::from("fgh"),
        nd: NoDisplay {},
    };

    for (name, field) in s.vectorize() as Vec<(Fields, Option<&Display>)> {
        if let Some(field) = field {
            println!("{:?} can display: {}", name, field);
        }
    }

    for (name, field) in s.vectorize() as Vec<(Fields, Option<&Debug>)> {
        if let Some(field) = field {
            println!("{:?} can debug: {:?}", name, field);
        }
    }
}

依赖

~2MB
~44K SLoC