rshtml_core 0.1.0

RsHtml: A Template Engine for Seamless HTML and Rust Integration.
Documentation
use crate::Node;
use crate::compiler::Compiler;
use anyhow::{Result, anyhow};
use proc_macro2::TokenStream;
use quote::quote;
use std::str::FromStr;

pub struct MatchExprCompiler;

impl MatchExprCompiler {
    pub fn compile(compiler: &mut Compiler, name: &str, arms: &Vec<(String, Vec<Node>)>) -> Result<TokenStream> {
        let mut arms_ts = TokenStream::new();

        for (arm_name, arm_nodes) in arms {
            let mut token_stream = TokenStream::new();
            for node in arm_nodes {
                let ts = compiler.compile(node)?;
                token_stream.extend(quote! {#ts});
            }
            let arm_head = TokenStream::from_str(arm_name).map_err(|err| anyhow!("Lex Error: {}", err))?;
            let arm_ts = quote! {
                #arm_head =>  { #token_stream },
            };

            arms_ts.extend(arm_ts);
        }

        let name_head = TokenStream::from_str(name).map_err(|err| anyhow!("Lex Error: {}", err))?;

        Ok(quote! {
           #name_head {
             #arms_ts
           }
        })
    }
}