1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
#[cfg(feature = "wasm-app")] pub mod client; #[cfg(feature = "wasm-server")] pub mod server { use proc_macro2::TokenStream; use quote::quote; use yarte_dom::dom_fmt::to_wasmfmt; use yarte_hir::{Struct, HIR}; use crate::{CodeGen, EachCodeGen, IfElseCodeGen}; pub struct WASMCodeGen<'a> { s: &'a Struct<'a>, } impl<'a> EachCodeGen for WASMCodeGen<'a> {} impl<'a> IfElseCodeGen for WASMCodeGen<'a> {} impl<'a> WASMCodeGen<'a> { pub fn new<'n>(s: &'n Struct<'n>) -> WASMCodeGen<'n> { WASMCodeGen { s } } } impl<'a> CodeGen for WASMCodeGen<'a> { fn gen(&mut self, ir: Vec<HIR>) -> TokenStream { let ir = to_wasmfmt(ir, self.s).expect("html"); let mut tokens = TokenStream::new(); for i in ir { use HIR::*; tokens.extend(match i { Local(a) => quote!(#a), Lit(a) => quote!(_fmt.write_str(#a)?;), Safe(a) => quote!(::std::fmt::Display::fmt(&(#a), _fmt)?;), Expr(a) => quote!(::yarte::Render::render(&(#a), _fmt)?;), Each(a) => self.gen_each(*a), IfElse(a) => self.gen_if_else(*a), }) } tokens } } }