cgp_macro_lib/entrypoints/
blanket_trait.rs1use proc_macro2::{Span, TokenStream};
2use quote::quote;
3use syn::{Ident, ItemTrait, parse2};
4
5use crate::blanket_trait::derive_blanket_trait;
6
7pub fn blanket_trait(attr: TokenStream, body: TokenStream) -> syn::Result<TokenStream> {
8 let context_ident: Ident = if attr.is_empty() {
9 Ident::new("__Context__", Span::call_site())
10 } else {
11 parse2(attr)?
12 };
13
14 let mut item_trait: ItemTrait = parse2(body)?;
15
16 let item_impl = derive_blanket_trait(&context_ident, &mut item_trait)?;
17
18 let out = quote! {
19 #item_trait
20
21 #item_impl
22 };
23
24 Ok(out)
25}