5 个不稳定版本

0.3.1 2024年3月25日
0.3.0 2023年3月19日
0.2.0 2022年5月7日
0.1.1 2022年4月29日
0.1.0 2022年4月28日

#416 in Rust 模式

每月30次下载

MIT/Apache

28KB
252

命名元组

github crates.io docs.rs

提供了一种名为 Named Tups 的新类型,可以使用 tup! 宏来调用。命名元组是包含一组命名参数的结构体,它们实际上就像普通的元组一样,可以通过实际的名称来访问和创建。

命名元组的想法是提供一种方法,可以在不创建构建器结构体的同时快速迭代想法,并且不会在编译时丢失类型检查的能力。命名元组还允许创建可以替换不存在参数的默认值。

[dependencies]
named-tup = "0.3.1"

[build-dependencies]
inwelling = "0.4.0"

[package.metadata.inwelling.named-tup-derive]

将以下内容放入您的 build.rs 文件中。

fn main() {
    inwelling::register();
}

如果您希望此包不扫描项目文件以确定正在使用哪些命名参数,请将您在 Cargo.toml 中使用的命名元组参数列表添加到您的 Cargo.toml 中,如下所示。

[package.metadata.inwelling.named-tup-derive]
arguments = ["count", "ingredients", "eggs", "price"]

示例

use named_tup::tup;
let count = 5;

// This will have the type of Tup!(count: i32, ingredients: [&str; 3], eggs: bool)
let cakes = tup!(count, ingredients: ["milk", "flower", "sugar"], eggs: true);

// We can just add a price afterwards
let mut cakes = cakes + tup!(price: 3);
// And now it has the type of Tup!(eggs: bool, ingredients: [&str; 3], count: i32, price: i32)

// Once the price is in the tup we can just update it!
cakes.price = 4;

// Will print tup { count: 5, eggs: true, ingredients: ["milk", "flower", "sugar"], price: 4 }
println!("{cakes:?}");

要使用默认值,只需在设置字段的项上添加 #[tup_default] 注解。此外,由于默认的 tup! 是一种类型,您需要通过调用 .into_tup() 将其转换为它,这可以通过 TupInto 特性访问。

use named_tup::{tup, Tup, tup_default, TupInto};

let options = tup!(read: false, write: true);

// Converts to Tup!(read: false, write: true, create: false, timeout: 5)
open_file("main.rs", options.into_tup());

#[tup_default]
fn open_file(
    path: &str,
    options: Tup!(
        read: bool = true,
        write: bool = false,
        create: bool = false,
        timeout: i32 = 5
    ))
{
    // Open the file
}

要测试该包,请启用功能 dev-test

路线图

  • 编写更多测试
  • 使用 Serde 序列化和反序列化
  • 为 cargo doc 提供更好的类型

许可证

根据您的选择,在 Apache 许可证,版本 2.0MIT 许可证 下获得许可。
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在此包中的任何贡献,都应作为上述双重许可,而无需任何额外条款或条件。

依赖项

~0.5–1MB
~22K SLoC