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
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