#[derive(Debug, Clone, PartialEq)]
pub enum BinOp {
Eq,
Ne,
Lt,
Gt,
Le,
Ge,
Add,
Sub,
Mod,
And,
Or,
In,
NotIn,
}
#[derive(Debug, Clone, PartialEq)]
pub enum Expr {
StringLit(String),
IntLit(i64),
BoolLit(bool),
Var(String),
Attribute(Box<Expr>, String), Index(Box<Expr>, Box<Expr>), Slice(Box<Expr>, Option<Box<Expr>>, Option<Box<Expr>>), BinOp(Box<Expr>, BinOp, Box<Expr>),
Not(Box<Expr>), IsTest(Box<Expr>, bool, String), Ternary(Box<Expr>, Box<Expr>, Box<Expr>), Filter(Box<Expr>, String, Vec<Expr>), Call(String, Vec<Expr>), }
#[derive(Debug, Clone, PartialEq)]
pub enum Node {
Text(String),
Var(Expr),
For {
target: String,
iterable: Expr, body: Vec<Node>,
},
If {
cases: Vec<(Expr, Vec<Node>)>, else_body: Option<Vec<Node>>,
},
Set {
name: String,
expr: Expr,
},
}
pub type Template = Vec<Node>;