cgp_macro_lib/entrypoints/
cgp_inherit.rs1use proc_macro2::TokenStream;
2use quote::quote;
3use syn::{ItemStruct, parse2};
4
5use crate::derive_context::derive_delegate_preset;
6use crate::parse::{SimpleType, TypeGenerics};
7
8pub fn cgp_inherit(attr: TokenStream, body: TokenStream) -> syn::Result<TokenStream> {
9 let context_struct: ItemStruct = parse2(body)?;
10
11 let preset: SimpleType = parse2(attr)?;
12
13 let type_generics = TypeGenerics::try_from(&context_struct.generics)?;
14
15 let (delegate_impl, is_provider_impl) =
16 derive_delegate_preset(&context_struct.ident, &Some(type_generics), &preset)?;
17
18 Ok(quote! {
19 #context_struct
20
21 #delegate_impl
22
23 #is_provider_impl
24 })
25}