use super::super::array::{
eval_array_chunk, eval_array_contains, eval_array_distinct_by, eval_array_drop,
eval_array_filter, eval_array_find, eval_array_find_index, eval_array_flat_map,
eval_array_flatten, eval_array_group_by, eval_array_index_of, eval_array_key_by,
eval_array_map, eval_array_partition, eval_array_slice, eval_array_sort_by, eval_array_take,
eval_array_unique, eval_array_unzip, eval_array_zip, eval_array_zip_with,
};
use super::super::*;
mod aggregate;
mod inventory;
use aggregate::{eval_array_aggregate_dispatch, is_array_aggregate_operator};
pub(super) use inventory::is_array_operator;
pub(super) fn eval_array_dispatch(
expr_op: &ExprOp,
record: &JsonValue,
context: Option<&JsonValue>,
out: &JsonValue,
base_path: &str,
injected: Option<&EvalValue>,
locals: Option<&EvalLocals<'_>>,
) -> Result<EvalValue, TransformError> {
match expr_op.op.as_str() {
"map" => eval_array_map(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"filter" => eval_array_filter(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"flat_map" => eval_array_flat_map(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"flatten" => eval_array_flatten(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"take" => eval_array_take(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"drop" => eval_array_drop(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"slice" => eval_array_slice(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"chunk" => eval_array_chunk(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"zip" => eval_array_zip(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"zip_with" => eval_array_zip_with(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"unzip" => eval_array_unzip(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"group_by" => eval_array_group_by(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"key_by" => eval_array_key_by(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"partition" => eval_array_partition(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"unique" => eval_array_unique(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"distinct_by" => eval_array_distinct_by(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"sort_by" => eval_array_sort_by(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"find" => eval_array_find(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"find_index" => eval_array_find_index(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"index_of" => eval_array_index_of(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
"contains" => eval_array_contains(
&expr_op.args,
injected,
record,
context,
out,
base_path,
locals,
),
op if is_array_aggregate_operator(op) => eval_array_aggregate_dispatch(
expr_op, record, context, out, base_path, injected, locals,
),
_ => unreachable!("array dispatch called for non-array operator"),
}
}