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次下载
28KB
252 行
命名元组
提供了一种名为 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.0 或 MIT 许可证 下获得许可。除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在此包中的任何贡献,都应作为上述双重许可,而无需任何额外条款或条件。
依赖项
~0.5–1MB
~22K SLoC