#枚举 #哈希表 #字段 #迭代器 #长度 #转换

small_iter_fields

获取迭代器、获取长度或从枚举转换为哈希表

4个版本

新增 0.1.4 2024年8月23日
0.1.3 2024年8月10日
0.1.2 2024年8月10日
0.1.1 2024年8月10日
0.1.0 2024年8月10日

391过程宏

Download history 149/week @ 2024-08-05 53/week @ 2024-08-12

每月 202 次下载

MIT/Apache

7KB

small_iter_fields

此crate添加了 #[derive(IterFields)]#[derive(LenFields)]

它适用于

  • 枚举

已知限制

  • 枚举变体必须没有数据

示例

use std::collections::HashMap;
use small_iter_fields::{IterFields, LenFields};
 
#[derive(IterFields, LenFields, Hash, PartialEq, Eq)]
enum Stage {
  Start,
  Middle,
  End,
}

let mut vec: Vec<Stage> = Vec::with_capacity(Stage::len());
assert!(vec.capacity() >= 3);

for stage in Stage::iter_fields() {
    vec.push(stage);
};

assert!(vec.contains(&Stage::Start));
assert!(vec.contains(&Stage::Middle));
assert!(vec.contains(&Stage::End));

let map: HashMap<Stage, Vec<i32>> = Stage::to_hashmap(Vec::new());
assert!(map.capacity() >= 3);

assert_eq!(map.get(&Stage::Start), Some(&Vec::new()));

许可证

MIT 或 Apache-2.0


lib.rs:

示例

use std::collections::HashMap;
use small_iter_fields::{IterFields, LenFields};

#[derive(IterFields, LenFields, Hash, PartialEq, Eq)]
enum Stage {
    Start,
    Middle,
    End,
}

let mut vec: Vec<Stage> = Vec::with_capacity(Stage::len());
assert!(vec.capacity() >= 3);

for stage in Stage::iter_fields() {
    vec.push(stage);
};

assert!(vec.contains(&Stage::Start));
assert!(vec.contains(&Stage::Middle));
assert!(vec.contains(&Stage::End));

let map: HashMap<Stage, Vec<i32>> = Stage::to_hashmap(Vec::new());
assert!(map.capacity() >= 3);

assert_eq!(map.get(&Stage::Start), Some(&Vec::new()));

枚举必须没有与之关联的数据

use small_iter_fields::IterFields;

#[derive(IterFields)]
enum DataEnum {
    Data(bool),
}

依赖

~250–690KB
~17K SLoC