cgp_macro_lib/entrypoints/
cgp_inherit.rs

1use 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}