Crates.io | thisisplural |
lib.rs | thisisplural |
version | 0.4.0 |
source | src |
created_at | 2021-09-11 18:16:10.062691 |
updated_at | 2024-04-03 03:01:48.949231 |
description | #[derive(Plural)] for creating frictionless new types with any collection type like Vec or HashMap |
homepage | https://github.com/ryo33/thisisplural |
repository | https://github.com/ryo33/thisisplural |
max_upload_size | |
id | 449816 |
size | 16,918 |
#[derive(Plural)]
for creating frictionless new types with any collection
type.
From
, Into
, FromIterator
, IntoIterator
, and
methods like .len()
or ::with_capacity
.Vec
and HashMap
.// 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());
}