#struct #macro-derive #clone #generate #another #copy #quite

clone_into_derive

此crate为结构体生成克隆宏。如果您想要将一个结构体完整地复制到另一个结构体中,这会非常方便。

2个版本

0.1.1 2023年1月8日
0.1.0 2023年1月3日

#1375 in 过程宏

Apache-2.0

7KB
58

clone_into_derive

此crate通过CloneInto过程宏生成克隆宏,用于结构体。如果您想要将一个结构体完整地复制到另一个结构体中,或者使用结构体初始化另一个结构体,这将非常方便。

CloneInto过程宏生成一个宏,用于克隆结构体中的所有公共字段。宏的名称来自结构体的名称。例如,如果结构体名称是AaaBbb,则宏名称变为aaa_bbb_clone_into!

    #[derive(CloneInto)]
    pub struct AaaBbb {
        pub a: i32,
        pub b: i32,
    }

此代码生成aaa_bbb_clone_into!宏。下面是aaa_bbb_clone_into!(aaabbb, ccc)的展开示例。

    ccc.a = aaabbb.a.clone();
    ccc.b = aaabbb.b.clone();

aaa_bbb_ccc_clone!(aaabbb,Ccc{c: 4})的展开如下。

    Ccc {
      a: aaabbb.a.clone(),
      b: aaabbb.b.clone(),
      c: 4
    }

您可以在Ccc的位置指定结构体名称。但有一个限制。现在,您不能使用路径指定结构体名称,所以您只能指定结构体名称。这看起来像是macro_rules的bug。当我使用ty解析器时,宏展开结果变成了一个错误。

示例在tests目录中。

依赖

~3.5–4.5MB
~88K SLoC