use std::collections::{BTreeMap, HashMap}; use indexmap::IndexMap; use super::{Span, Spanned}; #[derive(Debug, PartialEq)] pub struct File<'src> { pub decls: IndexMap, Expression<'src>>, } #[derive(Debug, PartialEq)] pub struct Expression<'src> { pub expr: Expr<'src>, pub span: Span, } impl<'src> Expression<'src> { pub fn new(expr: Expr<'src>, span: Span) -> Self { Self { expr, span } } } #[derive(Debug, PartialEq)] pub enum Expr<'src> { Node( Spanned<&'src str>, Option, Expression<'src>>>>, ), SimplePipe(Box>, Box>), // NamingPipe( // Box>, // (Vec>, Vec>), // Box>, // ), MappingPipe(Box>, Box>), NullPipe(Box>, Box>), MultiPipe(IndexMap, Expression<'src>>), // LetIn( // IndexMap, Box>>, // Box>, // ), // $ Var(&'src str), // @ InputVar(&'src str), AttrSet(Spanned, Expression<'src>>>), Lit(Lit<'src>), } #[derive(Debug, PartialEq)] pub enum Lit<'src> { // TODO: more bigger better number types Int(i64), Float(f64), String(&'src str), }