cgp_macro_lib/entrypoints/
derive_has_fields.rs

1use proc_macro2::TokenStream;
2use quote::quote;
3use syn::{Error, Item, parse2};
4
5use crate::derive_has_fields::{
6    derive_has_fields_impls_from_enum, derive_has_fields_impls_from_struct,
7};
8
9pub fn derive_has_fields(body: TokenStream) -> syn::Result<TokenStream> {
10    let item: Item = parse2(body)?;
11
12    let impls = match item {
13        Item::Struct(item_struct) => derive_has_fields_impls_from_struct(&item_struct)?,
14        Item::Enum(item_enum) => derive_has_fields_impls_from_enum(&item_enum)?,
15        _ => {
16            return Err(Error::new_spanned(
17                item,
18                "expect body to be either a struct or enum",
19            ));
20        }
21    };
22
23    Ok(quote! {
24        #( #impls )*
25    })
26}