Skip to main content

robin_sparkless_core/engine/
plan.rs

1//! Engine-agnostic plan executor trait.
2
3use crate::engine::DataFrameBackend;
4use crate::engine::SparkSessionBackend;
5use crate::error::EngineError;
6use serde_json::Value as JsonValue;
7
8/// Executes a logical plan (JSON list of ops) and returns a DataFrame.
9///
10/// The generic type parameter `S` is a backend-specific [`SparkSessionBackend`] implementation
11/// (e.g. the Polars-backed `SparkSession` in `robin-sparkless-polars`). Backends implement this
12/// trait to expose plan execution in terms of engine-agnostic traits and [`EngineError`].
13pub trait PlanExecutor<S: SparkSessionBackend>: Send + Sync {
14    fn execute_plan(
15        session: &S,
16        data: Vec<Vec<JsonValue>>,
17        schema: Vec<(String, String)>,
18        plan: &[JsonValue],
19    ) -> Result<Box<dyn DataFrameBackend>, EngineError>;
20}