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
/// High level intermediate representation after lowering Ast
// TODO: serialize and deserialize for container builder
#[derive(Debug, Clone, PartialEq)]
pub enum HIR {
    Lit(String),
    Expr(Box<syn::Expr>),
    Safe(Box<syn::Expr>),
    Each(Box<Each>),
    IfElse(Box<IfElse>),
    Local(Box<syn::Local>),
}

// TODO: to switch
#[derive(Debug, Clone, PartialEq)]
pub struct IfElse {
    pub ifs: (syn::Expr, Vec<HIR>),
    pub if_else: Vec<(syn::Expr, Vec<HIR>)>,
    pub els: Option<Vec<HIR>>,
}

/// for expr in args { body }
#[derive(Debug, Clone, PartialEq)]
pub struct Each {
    pub args: syn::Expr,
    pub body: Vec<HIR>,
    pub expr: syn::Expr,
}