compact-option-proc-macro 0.1.0

Attribute macro for compact-option's niche-packing optional; intended for `R` with spare bit patterns (primarily `repr(u8)` enums with <256 variants).
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use quote::quote;
use syn::{ItemEnum, Result};

use crate::parse::AttrArgs;

pub fn expand_enum(args: &AttrArgs, item: &ItemEnum) -> Result<proc_macro2::TokenStream> {
    let ident = &item.ident;
    let r_ty = &args.r_ty;
    let sentinel = &args.sentinel;

    Ok(quote! {
        #item
        unsafe impl const ::compact_option::CompactRepr<#r_ty> for #ident {
            const UNUSED_SENTINEL: #r_ty = #sentinel;
        }
    })
}