yarte_codegen/
html.rs

1use proc_macro2::TokenStream;
2use quote::quote;
3
4use super::{CodeGen, EachCodeGen, IfElseCodeGen, HIR};
5
6fn gen<C>(codegen: &mut C, v: Vec<HIR>) -> TokenStream
7where
8    C: CodeGen + EachCodeGen + IfElseCodeGen,
9{
10    let mut tokens = TokenStream::new();
11    for i in v {
12        use HIR::*;
13        tokens.extend(match i {
14            Local(a) => quote!(#a),
15            Lit(a) => quote!(_fmt.write_str(#a)?;),
16            Safe(a) => quote!((&(#a)).fmt(_fmt)?;),
17            Expr(a) => quote!((&(#a)).__renders_it(_fmt)?;),
18            Each(a) => codegen.gen_each(*a),
19            IfElse(a) => codegen.gen_if_else(*a),
20        })
21    }
22    tokens
23}
24
25pub struct HTMLCodeGen;
26
27impl EachCodeGen for HTMLCodeGen {}
28
29impl IfElseCodeGen for HTMLCodeGen {}
30impl CodeGen for HTMLCodeGen {
31    fn gen(&mut self, v: Vec<HIR>) -> TokenStream {
32        gen(self, v)
33    }
34}
35
36#[cfg(feature = "html-min")]
37pub mod html_min {
38    use super::*;
39    use yarte_dom::DOMFmt;
40
41    pub struct HTMLMinCodeGen;
42    impl EachCodeGen for HTMLMinCodeGen {}
43    impl IfElseCodeGen for HTMLMinCodeGen {}
44
45    impl CodeGen for HTMLMinCodeGen {
46        fn gen(&mut self, v: Vec<HIR>) -> TokenStream {
47            let dom: DOMFmt = v.into();
48            gen(self, dom.0)
49        }
50    }
51}