aboutsummaryrefslogtreecommitdiff
path: root/rprt-engine/src/expression.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rprt-engine/src/expression.rs')
-rw-r--r--rprt-engine/src/expression.rs72
1 files changed, 29 insertions, 43 deletions
diff --git a/rprt-engine/src/expression.rs b/rprt-engine/src/expression.rs
index 68849cb..1ee898e 100644
--- a/rprt-engine/src/expression.rs
+++ b/rprt-engine/src/expression.rs
@@ -1,55 +1,32 @@
#[derive(Debug, Clone, PartialEq)]
-pub enum SelectionValuedExpr {
- // Nullary selection function application
- NullaryApplicationS(SelectionFn),
- NullaryApplicationT(TextFn),
-
- // Monadic selection function application: α F
- MonadicApplicationS {
- arg: Box<SelectionValuedExpr>,
- func: SelectionFn,
- },
- // Monadic selection function application: F τ
- MonadicApplicationT {
- arg: Box<TextValuedExpr>,
- func: TextFn,
- },
-
- // Dyadic selection function application: α F β
- DyadicApplicationS {
- left: Box<SelectionValuedExpr>,
- right: Box<SelectionValuedExpr>,
- func: SelectionFn,
- },
- // Dyadic text function application: α F τ
- DyadicApplicationT {
- left: Box<SelectionValuedExpr>,
- right: Box<SelectionValuedExpr>,
- func: SelectionFn,
- },
-}
-
-#[derive(Debug, Clone, PartialEq)]
-pub enum TextValuedExpr {
- // Selection coerced to text (implicit coercion)
- FromSelection(Box<SelectionValuedExpr>),
-}
-
-#[derive(Debug, Clone, PartialEq)]
-pub enum SelectionFn {
- Function {
+pub enum Composite {
+ SelectionFunction {
func: BuiltinSelectionFn,
search_mod: Option<SearchModifier>,
result_transform: Option<ResultTransform>,
},
+ TextFunction {
+ func: BuiltinTextFn,
+ swapped: bool,
+ },
+
Hook {
kind: HookKind,
- left: Box<SelectionFn>,
- right: Box<SelectionFn>,
+ left: Box<Composite>,
+ right: Box<Composite>,
},
- Train(Vec<SelectionFn>),
+ Train2 {
+ f: Box<Composite>,
+ g: Box<Composite>,
+ },
+
+ Train3 {
+ f: Box<Composite>,
+ g: Box<Composite>,
+ h: Box<Composite>,
+ },
}
#[derive(Debug, Clone, PartialEq)]
@@ -65,7 +42,16 @@ pub enum TextFn {
right: Box<TextFn>,
},
- Train(Vec<TextFn>),
+ Train2 {
+ f: Box<TextFn>,
+ g: Box<TextFn>,
+ },
+
+ Train3 {
+ f: Box<TextFn>,
+ g: Box<TextFn>,
+ h: Box<TextFn>,
+ },
}
#[derive(Debug, Clone, PartialEq)]