#traits #testing #impl-block #proc-macro #unit-testing #generate #derive

nightly trait_derive

一个简单的过程宏,用于从impl块中生成特性

1 个不稳定版本

使用旧Rust 2015

0.1.0 2017年12月1日

#26 in #impl-block

MIT 协议

15KB
173

trait_derive是一个小的crate,它可以根据你的struct的impl块生成一个特性。这将在你需要为测试目的生成特性或想将现有代码转换为特性以实现解耦时节省重复。

要将它添加到你的项目中,请将以下行添加到你的Cargo.toml

trait_derive = "0.1.0"

目前,trait_derive需要你运行nightly Rust。希望在未来,当过程宏稳定时,这将会改变。

示例

使用这个crate看起来是这样的

#![feature(proc_macro)]
extern crate trait_derive;

use trait_derive::make_trait;

pub struct A;

#[make_trait] // This will generate a trait named 'TraitA' by default.
impl A {
    pub fn hello_world(&self) {
        println!("Hello, world!");
    }
}

fn takes_trait(x: &TraitA) {
   x.hello_world();
}
    
fn basic_usage() {
   let a = A { };
   takes_trait(&a);
}

#[make_trait(Database)] // This will generate a trait named 'Database'
impl A {
    pub fn query(&self) -> u32 {
        32
    }
}

依赖

~1.5MB
~41K SLoC