#clone #fields #smart #control #macro #custom-derive #macro-derive

macro smart-clone

Rust自定义 derive 宏,用于实现具有更多字段控制功能的 Clone 特性

1 个不稳定版本

0.1.0 2024年7月19日

295过程宏 中排名

Download history 97/week @ 2024-07-15 10/week @ 2024-07-22 12/week @ 2024-07-29

每月下载量:119

MIT 许可证

27KB
506

Build Status Test Status Code Coverage Latest Version Rust Documentation

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