cgp-macro-lib 0.7.0

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

use crate::cgp_fn::derive_cgp_fn;
use crate::utils::to_camel_case_str;

pub fn cgp_fn(attr: TokenStream, body: TokenStream) -> syn::Result<TokenStream> {
    let item_fn: ItemFn = parse2(body)?;

    let trait_ident = if attr.is_empty() {
        Ident::new(
            &to_camel_case_str(&item_fn.sig.ident.to_string()),
            item_fn.sig.ident.span(),
        )
    } else {
        parse2(attr)?
    };

    let derived = derive_cgp_fn(&trait_ident, item_fn)?;

    Ok(derived)
}