cgp_macro_lib/entrypoints/
blanket_trait.rs

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