cgp-macro-lib 0.7.0

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

use crate::derive_has_fields::derive_has_fields_impls_from_enum;
use crate::{derive_extract_field_from_enum, derive_from_variant_from_enum};

pub fn derive_cgp_variant(body: TokenStream) -> syn::Result<TokenStream> {
    let item_enum = parse2(body)?;
    derive_cgp_variant_from_enum(&item_enum)
}

pub fn derive_cgp_variant_from_enum(item_enum: &ItemEnum) -> syn::Result<TokenStream> {
    let has_fields = derive_has_fields_impls_from_enum(item_enum)?;
    let extract_field = derive_extract_field_from_enum(item_enum)?;
    let from_variant = derive_from_variant_from_enum(item_enum)?;

    Ok(quote! {
        #( #has_fields )*
        #extract_field
        #from_variant
    })
}