#generate #field #struct #derive #foo #i32 #with-constructor

derive-with

#[derive(With)] 为结构体中的每个字段生成 with-constructor

5个版本 (破坏性更新)

0.5.0 2024年1月20日
0.4.0 2024年1月10日
0.3.0 2023年10月21日
0.2.0 2023年10月19日
0.1.0 2023年10月18日

#1656过程宏

Download history 41/week @ 2024-04-01 114/week @ 2024-05-20 54/week @ 2024-05-27 72/week @ 2024-06-03 63/week @ 2024-06-10 19/week @ 2024-06-17 91/week @ 2024-06-24 90/week @ 2024-07-01 109/week @ 2024-07-08 81/week @ 2024-07-15

每月下载量:372
13 crates 中使用 (5个直接使用)

MIT 许可证

9KB
108

一个自定义 derive 实现,用于 #[derive(With)]

License Crates.io

入门指南

1. 为命名结构体中的每个字段生成 with-constructor。

#[derive(With)]
pub struct Foo {
    pub a: i32,
    pub b: String,
}

这将生成代码

impl Foo {
    pub fn with_a(mut self, a: impl Into<i32>) -> Self {
        self.a = a.into();
        self
    }
    pub fn with_b(mut self, b: impl Into<String>) -> Self {
        self.b = b.into();
        self
    }
}

2. 为元组结构体中的每个字段生成 with-constructor。

#[derive(With)]
pub struct Bar (i32, String);

这将生成代码

impl Bar {
    pub fn with_0(mut self, field_0: impl Into<i32>) -> Self {
        self.0 = field_0.into();
        self
    }
    pub fn with_1(mut self, field_1: impl Into<String>) -> Self {
        self.1 = field_1.into();
        self
    }
}

3. 为命名结构体中的特定字段生成 with-constructor。

#[derive(With)]
#[with(a)]
pub struct Foo {
    pub a: i32,
    pub b: String,
}

这将生成代码

impl Foo {
    pub fn with_a(mut self, a: impl Into<i32>) -> Self {
        self.a = a.into();
        self
    }
}

4. 为元组结构体中的特定字段生成 with-constructor。

#[derive(With)]
#[with(1)]
pub struct Bar (i32, String);

这将生成代码

impl Bar {
    pub fn with_1(mut self, field_1: impl Into<String>) -> Self {
        self.1 = field_1.into();
        self
    }
}

参考

依赖关系

~265–710KB
~17K SLoC