Derive Macro EnumPtr

Source
#[derive(EnumPtr)]
{
    // Attributes available to this derive:
    #[enum_ptr]
}
Expand description

Derives conversions to and from Compact.

ยงExamples

use enum_ptr::{EnumPtr, Unit};

#[derive(EnumPtr)]
#[enum_ptr(
    // copy,    // derives conversions to and from `CompactCopy`
    borrow(     // derives a reference type and `impl CompactBorrow`
        name = "FooRef",     // default: ident + "Ref"
        derive(Clone, Copy), // default: none
    ),
    borrow_mut( // derives a reference type and `impl CompactBorrowMut`
        name = "FooRefMut",  // default: ident + "RefMut"
        derive(Debug),       // default: none
    ),
)]
#[repr(C, usize)]
enum Foo {
    // `borrow` / `borrow_mut` requires all unskipped fields
    // to implement `FieldDeref` / `FieldDerefMut`
    A(Box<i64>),         // ref type: `&i64` / `&mut i64`
    B(Option<Box<i64>>), // ref type: `Option<&i64>` / `Option<&mut i64>`

    // use `skip` to skip both, or use `skip_borrow` / `skip_borrow_mut`
    #[enum_ptr(skip)]
    C(Unit),             // ref type: `PhantomData` (skipped)
}