#collection #hash-map #newtype #vec #derive

thisisplural

#[derive(Plural)] 用于创建与 Vec 或 HashMap 等任何集合类型无摩擦的新类型

6 个版本 (3 个破坏性版本)

0.4.0 2024 年 4 月 3 日
0.3.0 2022 年 5 月 11 日
0.2.0 2021 年 9 月 12 日
0.1.2 2021 年 9 月 11 日

#1405Rust 模式

每月 34 下载

MIT/Apache

13KB
270

thisisplural

GitHub MIT/Apache 2.0 Crates.io docs.rs

#[derive(Plural)] 用于创建与任何集合类型。

功能

  • 自动实现 FromIntoFromIteratorIntoIterator.len()::with_capacity 等方法。
  • 支持任何类似 VecHashMap 的集合。

示例

// This implements `From`, `Into`, `FromIterator`, `IntoIterator`.
#[derive(Plural)]
struct Numbers(Vec<u32>);

// use `From` trait
let my_favorite_numbers: Numbers = vec![].into();

// methods like `len()` are implemented
assert_eq!(my_favorite_numbers.len(), 0);
assert!(my_favorite_numbers.is_empty());

// `FromIterator` allows this `collect()`
let doubled_numbers: Numbers = my_favorite_numbers.iter().map(|x| x * 2).collect();

// `HashMap` like collections are also supported
#[derive(Plural)]
struct FavoriteNumbers(HashMap<&'static str, Numbers>);

// construct the struct with using `FromIterator`
let favorite_numbers =
    FavoriteNumbers::from_iter([("ryo33", my_favorite_numbers), ("someone", doubled_numbers)]);

// use it in a `for` loop (`IntoIterator` trait)
for (name, numbers) in favorite_numbers {
    // use Deref trait
    println!("{} has {} favorite number(s)", name, numbers.0.len());
}

依赖

~250–690KB
~16K SLoC