forked from katzen-cafe/iowo
36 lines
965 B
Rust
36 lines
965 B
Rust
use std::collections::{BTreeMap, HashMap};
|
|
|
|
use indexmap::IndexMap;
|
|
|
|
use super::Spanned;
|
|
|
|
#[derive(Debug, PartialEq, Eq)]
|
|
pub struct File<'src> {
|
|
pub decls: IndexMap<Spanned<&'src str>, Spanned<Expr<'src>>>,
|
|
}
|
|
|
|
#[derive(Debug, PartialEq, Eq)]
|
|
pub enum Expr<'src> {
|
|
Node(
|
|
Spanned<&'src str>,
|
|
Option<Spanned<IndexMap<Spanned<&'src str>, Expr<'src>>>>,
|
|
),
|
|
SimplePipe(Box<Expr<'src>>, Box<Expr<'src>>),
|
|
NamingPipe(
|
|
Box<Expr<'src>>,
|
|
(Vec<Spanned<&'src str>>, Vec<Spanned<&'src str>>),
|
|
Box<Expr<'src>>,
|
|
),
|
|
MappingPipe(Box<Expr<'src>>, Box<Expr<'src>>),
|
|
NullPipe(Box<Expr<'src>>, Box<Expr<'src>>),
|
|
MultiPipe(IndexMap<Spanned<&'src str>, Expr<'src>>),
|
|
LetIn(
|
|
IndexMap<Spanned<&'src str>, Box<Expr<'src>>>,
|
|
Box<Expr<'src>>,
|
|
),
|
|
// $
|
|
Var(Spanned<&'src str>),
|
|
// @
|
|
InputVar(Spanned<&'src str>),
|
|
AttrSet(Spanned<IndexMap<Spanned<&'src str>, Expr<'src>>>),
|
|
}
|