diff options
Diffstat (limited to 'rprt-engine/src/expression.rs')
| -rw-r--r-- | rprt-engine/src/expression.rs | 72 |
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)] |
