#records #proc-macro

moretypes

命名元组、记录等更多内容!

4 个版本

0.1.3 2022 年 3 月 8 日
0.1.2 2022 年 2 月 27 日
0.1.1 2022 年 2 月 27 日
0.1.0 2022 年 2 月 27 日

1660数据结构

MPL-2.0 许可证

11KB
157

MoreTypes

为您的类型提供更多类型!

理由

这个库是我的 records 库的继承者,旨在使其更加模块化和可组合。而不是一个 record 属性,moretypes 提供了几个属性,可以组合起来给对象赋予某些属性。这与特质不同,因为这些属性通常是多个特质的实现、构造函数、行为变化等。

记录

MoreTypes 中的记录是所有字段都公开的 struct(就像 records::record,但没有大多数方法)。它们在配置 struct 等情况下很有用,在这些情况下,在每个字段前放置 pub 最多是令人厌烦的样板代码,在最坏的情况下是逻辑上错误的。以下划线开头的私有字段保持私有。

use moretypes::record;

#[record]
pub struct Config {
    option1: String,
    option2: u32,
}

pub fn main() {
    let cfg = Config {
        option1: String::from("Foo"),
        option2: 69,
    };

    println!("option1 = {}, option2 = {}", cfg.option1, cfg.option2);
}

命名元组

命名元组是有命名字段的 struct,可以像元组 struct 一样使用。它们提供了将元组转换为/从元组转换的能力,以及像元组一样构建它们的方式(这些都可以通过标志关闭)。当您同时想要命名字段和顺序时,它们作为元组 struct 的替代品非常有用。字段按它们声明的顺序排序。

use moretypes::named_tuple;

#[named_tuple]
pub struct Vec3<T> {
    x: T,
    y: T,
    z: T,
}

pub fn main() {
    let pos = Vec3::new(1.0, 2.0, 3.0);
    println!("{:?}", pos.as_tuple());
}

依赖关系

~1.5MB
~34K SLoC