cgp_macro_lib/entrypoints/
cgp_variant.rs

1use proc_macro2::TokenStream;
2use quote::quote;
3use syn::{ItemEnum, parse2};
4
5use crate::derive_has_fields::derive_has_fields_impls_from_enum;
6use crate::{derive_extract_field_from_enum, derive_from_variant_from_enum};
7
8pub fn derive_cgp_variant(body: TokenStream) -> syn::Result<TokenStream> {
9    let item_enum = parse2(body)?;
10    derive_cgp_variant_from_enum(&item_enum)
11}
12
13pub fn derive_cgp_variant_from_enum(item_enum: &ItemEnum) -> syn::Result<TokenStream> {
14    let has_fields = derive_has_fields_impls_from_enum(item_enum)?;
15    let extract_field = derive_extract_field_from_enum(item_enum)?;
16    let from_variant = derive_from_variant_from_enum(item_enum)?;
17
18    Ok(quote! {
19        #( #has_fields )*
20        #extract_field
21        #from_variant
22    })
23}