tonlib-tlb-derive 0.1.0

Derive macro for tonlib-core TLB types
Documentation
use proc_macro2::TokenStream;
use syn::{parse_quote, GenericParam, Generics, WhereClause, WherePredicate};

pub(crate) fn strip_type_defaults(mut generics: Generics) -> Generics {
    for param in &mut generics.params {
        if let GenericParam::Type(type_param) = param {
            type_param.default = None;
        }
    }

    generics
}

pub(crate) fn add_where_predicates<I>(
    mut generics: Generics,
    predicates: I,
    _crate_path: &TokenStream,
) -> Generics
where
    I: IntoIterator<Item = WherePredicate>,
{
    let where_clause = generics.where_clause.get_or_insert_with(empty_where_clause);

    for predicate in predicates {
        where_clause.predicates.push(predicate);
    }

    generics
}

fn empty_where_clause() -> WhereClause {
    parse_quote!(where)
}