use crate::{ expression::Composite, selection::{Selection, VectoriseError}, selection_functions::{evaluate_selection_function, SFError}, state::{EditorState, StateResult}, }; use thiserror::Error; #[derive(Error, Debug)] pub enum EvaluationError { #[error("{0}")] SelectionFunctionError(VectoriseError), #[error("Not yet implemented {0}")] UnimplementedError(&'static str), } pub fn evaluate( es: &EditorState, comp: Composite, left: Option, right: Option, ) -> Result { match comp { Composite::SelectionFunction { func, search_mod, result_transform, } => { let sel = evaluate_selection_function(es, func, search_mod, result_transform, left, right) .map_err(EvaluationError::SelectionFunctionError)?; Ok((sel, Vec::new())) } Composite::TextFunction { func, swapped } => { Err(EvaluationError::UnimplementedError("text function")) } Composite::Hook { kind, left, right } => Err(EvaluationError::UnimplementedError("hook")), Composite::Train2 { f, g } => Err(EvaluationError::UnimplementedError("train2")), Composite::Train3 { f, g, h } => Err(EvaluationError::UnimplementedError("train3")), Composite::Group { operations } => Err(EvaluationError::UnimplementedError("group")), } }