1 个不稳定版本
0.1.0 | 2024年7月19日 |
---|
295 在 过程宏 中排名
每月下载量:119
27KB
506 行
Rust SmartClone
Rust自定义 derive 宏,用于实现具有更多控制功能的克隆值字段的 Clone
特性。
use smart_clone::SmartClone;
#[derive(SmartClone)]
struct Foo {
a: u8, // left for standard clone
#[clone = 12]
b: u8, // Override with hardcoded value (same as `#[clone(12)]`)
#[clone(TEST)]
c: u8, // In general, prefer this syntax for hardcode, variable or const
#[clone((42, 69))]
d: (i32, u32),
#[clone(default)]
e: Vec<Vec<Vec<(u8, u8)>>>, // Reserved 'skip' keyword to clone to Default::default() value (g type must implement `Default`)
#[clone(Some(Default::default()))] // `Some(Default::default())` is not `None` but `Some(0)` !
f: Option<i32>,
#[clone(clone_with = "SimpleStruct::vec_clone")]
g: Vec<u32>,
#[clone("banana".to_owned())]
h: String,
}
将生成
impl Clone for SimpleStruct {
fn clone(&self) -> Self {
Self {
a: self.a.clone(),
b: 12,
c: TEST,
d: (42, 69),
e: Default::default(),
f: Some(Default::default()),
g: SimpleStruct::vec_clone(&self.g),
h: "banana".to_owned(),
}
}
}
安装
- 将
smart-clone = "0.1.0""
添加为 Cargo.toml 中的依赖项。 - 在您想要克隆的结构体和枚举中,在同一个模块中导入 derive 宏,并使用
use smart_clone::SmartClone;
,然后在结构体或枚举上写#[derive(SmartClone)]
。 - 使用属性
#[clone(...)]
,并指定所需结构字段上的选项。
API 选项
#[clone]
:将按照常规方式克隆字段。相当于没有注解。#[clone = xxx]
:当结构体被克隆时,将值xxx
设置到字段中。#[clone(xxx)]
:与上面相同,但xxx
可以是任何你想要的,而不仅仅是文本#[clone(clone_with = "xxx")]
:该字段将通过引用传递给名为xxx
的函数,并在结构体克隆时使用返回的值。
示例
请参阅 示例 文件夹以了解各种用法。
依赖项
~245–680KB
~16K SLoC