#default #automatic #insert #struct #literals #proc-macro #derive-debug

autodefault

一个过程宏,它自动将..Default::default()插入到你的结构体字面量中

3个稳定版本

2.0.0 2021年4月11日
1.1.0 2021年4月10日
1.0.0 2021年4月10日

#1331 in 过程宏

Download history 23/week @ 2024-03-11 21/week @ 2024-03-18 58/week @ 2024-03-25 40/week @ 2024-04-01 12/week @ 2024-04-08 20/week @ 2024-04-15 21/week @ 2024-04-22 17/week @ 2024-04-29 10/week @ 2024-05-06 19/week @ 2024-05-13 18/week @ 2024-05-20 22/week @ 2024-05-27 16/week @ 2024-06-03 17/week @ 2024-06-10 15/week @ 2024-06-17 20/week @ 2024-06-24

每月 71 次下载

MPL-2.0 许可证

18KB
259

Crates.io Crates.io docs.rs

autodefault

一个库,它会自动为你插入..Default::default()

简介

这种情况你遇到过吗?

#[derive(Debug, Default, PartialEq, Eq)]
struct Inner {
    x: i32,
    y: i32,
    z: i32,
}

#[derive(Debug, Default, PartialEq, Eq)]
struct Mid {
    a: Inner,
    b: Inner,
    c: Inner,
    d: Inner
}

#[derive(Debug, Default, PartialEq, Eq)]
struct Outer {
    mid1: Mid,
    mid2: Mid,
    mid3: Mid,
    mid4: Mid,
}

fn build_outer() -> Outer {
    Outer {
        mid1: Mid {
            a: Inner {
                x: 10,
                ..Default::default()  // :D
            },
            b: Inner {
                y: 10,
                ..Default::default()  // :)
            },
            ..Default::default()  // :|
        },
        mid2: Mid {
            b: Inner {
                z: 10,
                ..Default::default()  // :/
            },
            ..Default::default()  // :(
        },
        ..Default::default()  // >:(
    }
}

当构建深层嵌套的结构体字面量时,你是否想省去所有繁琐的..Default::default()调用?现在你可以做到了!使用autodefault,构建大型结构体字面量(例如用于测试、bevy组件或其他你需要的东西)从未如此简单!只需将任何函数标记为具有#[autodefault]属性,剩下的交给我们处理。

use autodefault::autodefault;

#[autodefault]
fn build_outer_simple() -> Outer {
    Outer {
        mid1: Mid {
            a: Inner { x: 10 },
            b: Inner { y: 10 },
        },
        mid2: Mid {
            b: Inner { z: 10 },
        }
    }
}  // :O

assert_eq!(build_outer(), build_outer_simple())

从未如此简单!查看参考文档以获取更多详细信息。

依赖

~1.5MB
~35K SLoC