ichika-macros 0.1.0

A helper library for automatically constructing a thread pool that communicates via message pipes.
Documentation
use anyhow::Result;
use proc_macro2::TokenStream;
use quote::quote;

use super::generate_closure;
use crate::tools::pipe_flatten::PipeNodeFlatten;

pub(crate) fn generate_closures(steps: Vec<PipeNodeFlatten>) -> Result<TokenStream> {
    let closure_impl_list = steps
        .iter()
        .enumerate()
        .map(|(id, node)| {
            Ok(match node {
                PipeNodeFlatten::Closure(closure) => generate_closure(closure.clone())?,
                PipeNodeFlatten::Map(nodes) => {
                    todo!("递归调用 generate_closures 函数,生成多个闭包的实现")
                }
            })
        })
        .collect::<Vec<Result<_>>>();
    let closure_impl_list = closure_impl_list
        .into_iter()
        .collect::<Result<Vec<_>>>()
        .expect(
            "Failed to generate closure implementation list. Please check the error message above.",
        );

    Ok(quote! {
      #(#closure_impl_list)*
    })
}