cgp-macro-lib 0.7.0

Context-generic programming core component macros implemented as a library.
Documentation
use quote::ToTokens;
use syn::TypeParamBound;
use syn::punctuated::Punctuated;
use syn::token::Plus;

use crate::cgp_fn::ImplicitArgField;
use crate::derive_getter::derive_getter_constraint;
use crate::symbol::symbol_from_string;

pub fn build_implicit_args_bounds(
    implicit_args: &[ImplicitArgField],
) -> syn::Result<Punctuated<TypeParamBound, Plus>> {
    let mut constraints: Punctuated<TypeParamBound, Plus> = Punctuated::new();

    for arg in implicit_args {
        let field_symbol = symbol_from_string(&arg.field_name.to_string());

        let constraint = derive_getter_constraint(
            &arg.field_type,
            &arg.field_mut,
            &arg.field_mode,
            field_symbol.to_token_stream(),
            &None,
        )?;

        constraints.push(constraint);
    }

    Ok(constraints)
}