use serde_json::Value;
use super::model::{
CompileOptions, CompiledProgram, ExecutionContext, ExecutionOutput, LanguageError,
ModuleSource, ProgramIr,
};
pub trait LanguageEngine: Send + Sync {
fn id(&self) -> &'static str;
fn parse(&self, module: &ModuleSource) -> Result<ProgramIr, LanguageError>;
fn compile(
&self,
ir: &ProgramIr,
options: &CompileOptions,
) -> Result<CompiledProgram, LanguageError>;
fn run(
&self,
compiled: &CompiledProgram,
input: Value,
ctx: &ExecutionContext,
) -> Result<ExecutionOutput, LanguageError>;
}