#numbers #enums #deserialize #num #data #constrained #debugging

small-num

用于创建小数的轻量级crate

3个不稳定版本

0.2.0 2024年5月21日
0.1.1 2024年5月20日
0.1.0 2024年5月20日

#995 in 编码

MIT许可证

17KB
331

小数

小数可以用来描述一些受限制的数据。例如,对齐字节数

use small_num::small_num;

small_num! {
    #[derive(Clone, Debug, PartialEq, Copy, Eq, PartialOrd, Ord, Hash)]
    pub enum AlignBytes: [1, 2, 4];
}

let bytes = AlignBytes::new(2);
assert_eq!(bytes, Some(AlignBytes::_2));
assert_eq!(AlignBytes::new(3), None);
assert_eq!(std::mem::size_of::<Option<AlignBytes>>(), 1);

或适用于特定范围的整数

use small_num::small_num;

small_num! {
    #[derive(Clone, Debug, PartialEq, Copy, Eq, PartialOrd, Ord, Hash)]
    pub enum U7: ..128;
}

assert_eq!(U7::new(0), Some(U7::_0));
assert_eq!(U7::new(50), Some(U7::_50));
assert_eq!(U7::new(127), Some(U7::_127));
assert_eq!(U7::new(128), None);
assert_eq!(std::mem::size_of::<Option<U7>>(), 1);

可以使用as运算符将其转换为整数

use small_num::small_num;

small_num! {
    #[derive(Clone, Debug, PartialEq, Copy, Eq, PartialOrd, Ord, Hash)]
    pub enum Num50to100: 50..=100;
}

assert_eq!(Num50to100::new(69).unwrap() as u32, 69);

where子句可以用来推导支持的特质

use small_num::small_num;

small_num! {
    #[derive(Clone)]
    pub enum MySmallNumber: [0, 42, 121]
    where
        Self: Debug + Serialize;
}

where子句中的支持特质

  • Debug - 将您的Small数以常规数字的形式打印出来
  • Serialize(带有serde特性)
  • Deserialize(带有serde特性)

crate特性

  • serde启用SerializeDeserialize推导。

依赖项

~175KB