Skip to main content

src/webql/runner.gleam

import gleam/dynamic
import webql/assembler/plan
import webql/engine
import webql/memory
import webql/runner/run_plan

pub opaque type Runner(task) {
  Runner(plan: plan.Plan(task))
}

/// Creates a new runner instance from an executable plan.
pub fn new(plan: plan.Plan(task)) -> Runner(task) {
  Runner(plan:)
}

/// Runs an executable plan.
pub fn run(
  runner: Runner(task),
  memory: memory.Memory(storage),
  engine: engine.Engine(task, memory.Memory(storage), error),
  parameters: dynamic.Dynamic,
) -> task {
  run_plan.run(runner.plan, memory, engine, parameters)
}