compo-macros 0.1.3

Compo is a general-purpose declarative and reactive component framework designed for single-threaded asynchronous execution, offering high performance and safety guarantees. Suitable for GUI scenarios or other similar non-GUI component systems.
Documentation
use {
    proc_macro::{TokenStream, TokenTree},
    std::collections::HashMap,
};

pub(super) fn handle_stmt(
    stmts: &mut Vec<TokenStream>,
    stmt: &mut Vec<TokenTree>,
    refer_to_component: &mut HashMap<String, HashMap<String, Vec<String>>>,
) {
    stmts.push(TokenStream::from_iter(stmt.clone()));
    let mut iter = stmt.iter();
    while let Some(i) = iter.next() {
        if let TokenTree::Ident(ident) = i
            && let Some(c) = refer_to_component.get(&ident.to_string())
            && let Some(TokenTree::Punct(p)) = iter.next()
            && p.as_char() == '='
        {
            for (component_id, properties) in c.iter() {
                for property_name in properties.iter() {
                    stmts.push(ts!("this.{}.set_{}(&{});", component_id, property_name, i));
                }
                stmts.push(ts!("this.{}.update();", component_id));
            }
            break;
        }
    }
    stmt.clear();
}