cgp_macro_lib/entrypoints/
derive_has_fields.rs1use 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}