cgp-macro-lib 0.6.1

Context-generic programming core component macros implemented as a library.
Documentation
use proc_macro2::{Span, TokenStream};
use quote::quote;
use syn::{Ident, ItemTrait, parse2};

use crate::blanket_trait::derive_blanket_trait;

pub fn blanket_trait(attr: TokenStream, body: TokenStream) -> syn::Result<TokenStream> {
    let context_ident: Ident = if attr.is_empty() {
        Ident::new("__Context__", Span::call_site())
    } else {
        parse2(attr)?
    };

    let mut item_trait: ItemTrait = parse2(body)?;

    let item_impl = derive_blanket_trait(&context_ident, &mut item_trait)?;

    let out = quote! {
        #item_trait

        #item_impl
    };

    Ok(out)
}