57 lines
1.4 KiB
Rust
57 lines
1.4 KiB
Rust
use std::collections::{BTreeMap, HashMap};
|
|
|
|
use indexmap::IndexMap;
|
|
|
|
use super::{Span, Spanned};
|
|
|
|
#[derive(Debug, PartialEq)]
|
|
pub struct File<'src> {
|
|
pub decls: IndexMap<Spanned<&'src str>, 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<Spanned<IndexMap<Spanned<&'src str>, Expression<'src>>>>,
|
|
),
|
|
SimplePipe(Box<Expression<'src>>, Box<Expression<'src>>),
|
|
// NamingPipe(
|
|
// Box<Expression<'src>>,
|
|
// (Vec<Spanned<&'src str>>, Vec<Spanned<&'src str>>),
|
|
// Box<Expression<'src>>,
|
|
// ),
|
|
MappingPipe(Box<Expression<'src>>, Box<Expression<'src>>),
|
|
NullPipe(Box<Expression<'src>>, Box<Expression<'src>>),
|
|
MultiPipe(IndexMap<Spanned<&'src str>, Expression<'src>>),
|
|
// LetIn(
|
|
// IndexMap<Spanned<&'src str>, Box<Expression<'src>>>,
|
|
// Box<Expression<'src>>,
|
|
// ),
|
|
// $
|
|
Var(&'src str),
|
|
// @
|
|
InputVar(&'src str),
|
|
AttrSet(Spanned<IndexMap<Spanned<&'src str>, 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),
|
|
}
|