cgp-macro-lib 0.7.0

Context-generic programming core component macros implemented as a library.
Documentation
use syn::punctuated::Punctuated;
use syn::token::Comma;
use syn::{GenericParam, Generics, Type, parse_quote};

use crate::parse::TypeGenerics;

pub fn parse_is_provider_params(generics: &Generics) -> syn::Result<Punctuated<Type, Comma>> {
    let params = TypeGenerics::try_from(generics)?.generics.params;

    let params = params.into_iter().map(|param| -> Type {
        match param {
            GenericParam::Type(type_param) => {
                let ident = type_param.ident;
                parse_quote! { #ident }
            }
            GenericParam::Lifetime(life_param) => {
                let life = &life_param.lifetime;
                parse_quote! { Life<#life> }
            }
            GenericParam::Const(_) => {
                unimplemented!("const generic parameters are not yet supported in CGP traits")
            }
        }
    });

    Ok(Punctuated::from_iter(params))
}