cgp-macro-lib 0.6.1

Context-generic programming core component macros implemented as a library.
Documentation
use proc_macro2::TokenStream;
use quote::quote;
use syn::{Error, Item, parse2};

use crate::derive_has_fields::{
    derive_has_fields_impls_from_enum, derive_has_fields_impls_from_struct,
};

pub fn derive_has_fields(body: TokenStream) -> syn::Result<TokenStream> {
    let item: Item = parse2(body)?;

    let impls = match item {
        Item::Struct(item_struct) => derive_has_fields_impls_from_struct(&item_struct)?,
        Item::Enum(item_enum) => derive_has_fields_impls_from_enum(&item_enum)?,
        _ => {
            return Err(Error::new_spanned(
                item,
                "expect body to be either a struct or enum",
            ));
        }
    };

    Ok(quote! {
        #( #impls )*
    })
}