4 个版本
0.1.3 | 2019 年 4 月 21 日 |
---|---|
0.1.2 | 2019 年 1 月 17 日 |
0.1.1 | 2019 年 1 月 16 日 |
0.1.0 | 2019 年 1 月 16 日 |
#8 在 #declaring
83 每月下载次数
在 5 个包中使用 (直接使用 4 个)
38KB
670 代码行
named-tuple.rs
一个用于声明一个管理 struct
中字段的 tuple
的宏。
入门指南
named-tuple.rs 可在 crates.io 上找到。建议在那里查找最新版本以及文档的最新构建链接。
在更新此 README 的最后,最新发布的版本可以这样使用
将以下依赖项添加到您的 Cargo 清单...
[dependencies]
named_tuple = "0.1"
...并查看 文档 了解如何使用它。
示例
#[macro_use]
extern crate named_tuple;
named_tuple!(
#[derive(Clone, Copy, Debug, Default, Hash, PartialEq)]
struct Human<'a> {
name: &'a str,
age: usize,
}
);
named_tuple!(
#[derive(Copy, Debug)]
struct Endpoint(host, port);
);
fn main() {
/// structs with named fields
let mut human = Human::new("alice", 18);
assert_eq!(Human::field_names(), &["name", "age"]);
assert_eq!(human.fields(), (("name", "alice"), ("age", 18)));
assert_eq!(human.field_values(), ("alice", 18));
assert_eq!(human.name(), "alice");
assert_eq!(human.age(), 18);
assert_eq!((human.0).0, "alice");
assert_eq!((human.0).1, 18);
assert_eq!(format!("{:?}", human), "Human { name: \"alice\", age: 18 }");
human.set_name("bob");
assert_eq!(human, ("bob", 18));
human.set_age(20);
assert_eq!(human, Human::from(("bob", 20)));
let t: (&str, usize) = human.into();
assert_eq!(t, ("bob", 20));
// tuple structs
let mut endpoint = Endpoint::new("localhost", 80);
assert_eq!(endpoint.field_names(), &["host", "port"]);
assert_eq!(endpoint.fields(), (("host", "localhost"), ("port", 80)));
assert_eq!(endpoint.field_values(), ("localhost", 80));
assert_eq!(endpoint.host(), "localhost");
assert_eq!(endpoint.port(), 80);
assert_eq!(
format!("{:?}", endpoint),
"Endpoint { host: \"localhost\", port: 80 }"
);
endpoint.set_host("google.com");
endpoint.set_port(443);
assert_eq!(("google.com", 443), endpoint.into());
}
许可证
许可协议为以下之一
- Apache License 2.0 许可协议 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
您可选择。
贡献
除非您明确声明,否则根据 Apache-2.0 许可协议定义的任何贡献,均将按照上述方式进行双许可,不附加任何额外的条款或条件。
依赖项
~2–12MB
~145K SLoC