rulemorph 0.3.4

YAML-based declarative data transformation engine for CSV/JSON to JSON
Documentation
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"),
    }
}