enum-ptr-derive 0.2.0

Ergonomic tagged pointer
Documentation
use darling::{ast, util, FromDeriveInput, FromField, FromMeta, FromVariant};

#[derive(FromDeriveInput)]
#[darling(supports(enum_tuple), attributes(enum_ptr), forward_attrs(repr))]
pub struct Input {
    pub ident: syn::Ident,
    pub vis: syn::Visibility,
    pub generics: syn::Generics,
    pub attrs: Vec<syn::Attribute>,
    pub data: ast::Data<Variant, ()>,

    pub copy: util::Flag,
    pub borrow: Option<util::Override<BorrowConf>>,
    pub borrow_mut: Option<util::Override<BorrowConf>>,
}

#[derive(FromVariant)]
#[darling(attributes(enum_ptr))]
pub struct Variant {
    pub ident: syn::Ident,
    pub discriminant: Option<syn::Expr>,
    pub fields: ast::Fields<Field>,

    pub skip: util::Flag,
    pub skip_borrow: util::Flag,
    pub skip_borrow_mut: util::Flag,
}

#[derive(FromField)]
pub struct Field {
    pub ty: syn::Type,
}

#[derive(FromMeta, Default, Clone)]
pub struct BorrowConf {
    pub name: Option<String>,
    pub derive: Option<syn::Meta>,
}