#wrapper #derive #proc-macro #generate

macro primwrap

Derive operation traits for primitive wrapper structs

2 stable releases

1.1.0 Oct 25, 2023
1.0.0 Oct 25, 2023

#1178 in Procedural macros

Apache-2.0

20KB
602 lines

Primitive Wrapper

Primitive Wrapper is a small derive macro for generating operation trait implementations for primitive wrapper structs, making the inner value transparent:

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

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

The implemented traits are:

  • Arithmetic: Add, Sub, Mul, Div, Rem, Neg
  • Bitwise: Not, BitAnd, BitOr, BitXor, Shl, Shr
  • Passthrough Formatting: Debug, Display, Binary, LowerExp, LowerHex, Octal, UpperExp, UpperHex
  • Comparison: PartialEq/PartialOrd with the inner type
  • Accumulation: Sum and Product

By default, all of the above traits are implemented. These groups can also be selected individually:

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

Prior Art

This crate provides similar functionality to the newtype_derive crate, but the derived traits are specified individually. It is more generalized for all new-type patterns, whereas this crate is designed only for new-types wrapping integers, floats, and bool. Use newtype_derive if you need more fine-grained control over the traits implemented.

Dependencies

~1–1.4MB
~28K SLoC