#wrapper #derive #proc-macro #generate

primwrap

为原始包装结构体派生操作特征

2个稳定版本

1.1.0 2023年10月25日
1.0.0 2023年10月25日

#822 in 过程宏

Apache-2.0

20KB
602

原始包装

原始包装是一个小型派生宏,用于生成原始包装结构体的操作特征实现,使内部值透明

#[derive(Primitive)]
struct Int(u64);

fn main() {
    let input = Int(0xFF0000);
    let mask = Int(0xFF);
    let result = input >> 16 & mask;
    assert_eq!(result, 0xFF);
}

实现的特征包括

  • 算术:AddSubMulDivRemNeg
  • 位运算:NotBitAndBitOrBitXorShlShr
  • 透传格式化:DebugDisplayBinaryLowerExpLowerHexOctalUpperExpUpperHex
  • 比较:与内部类型相关的PartialEq/PartialOrd
  • 累积:SumProduct

默认情况下,所有上述特征都得到了实现。也可以单独选择这些组

#[derive(Primitive)]
#[primwrap(arithmetic, bitwise, formatting, comparison, accumulation)]
struct Int(u64);

现有技术

此crate提供与newtype_derive crate类似的功能,但派生的特征是分别指定的。它更通用,适用于所有新类型模式,而此crate仅设计用于包装整数、浮点数和bool的新类型。如果您需要更细粒度的特征控制,请使用newtype_derive。

依赖项

~1–1.4MB
~29K SLoC