use serde_json::Value;
use crate::language::LanguageEngine;
use super::model::{
CompiledTemplate, ReactiveWebError, ReactiveWebOptions, RenderContext, RenderOutput,
TemplateSource,
};
pub trait ReactiveWebEngine: Send + Sync {
fn id(&self) -> &'static str;
fn compile_template(
&self,
template: &TemplateSource,
language: &dyn LanguageEngine,
options: &ReactiveWebOptions,
) -> Result<CompiledTemplate, ReactiveWebError>;
fn render(
&self,
compiled: &CompiledTemplate,
state: Value,
language: &dyn LanguageEngine,
ctx: &RenderContext,
) -> Result<RenderOutput, ReactiveWebError>;
}