use serde::{Deserialize, Serialize};
use serde_json::Value;
use super::model::{
CompiledTemplate, ReactiveWebOptions, RenderContext, RenderOutput, TemplateSource,
};
pub const RWE_PROTOCOL_VERSION: &str = "rwe.v1";
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProtocolMeta {
pub version: String,
pub rwe_engine: String,
pub language_engine: String,
}
impl Default for ProtocolMeta {
fn default() -> Self {
Self {
version: RWE_PROTOCOL_VERSION.to_string(),
rwe_engine: "rwe".to_string(),
language_engine: "language.deno_sandbox".to_string(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompileTemplateRequest {
pub meta: ProtocolMeta,
pub template: TemplateSource,
#[serde(default)]
pub options: ReactiveWebOptions,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompileTemplateResponse {
pub meta: ProtocolMeta,
pub compiled: CompiledTemplate,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RenderTemplateRequest {
pub meta: ProtocolMeta,
pub compiled: CompiledTemplate,
pub state: Value,
pub ctx: RenderContext,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RenderTemplateResponse {
pub meta: ProtocolMeta,
pub output: RenderOutput,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProtocolError {
pub code: String,
pub message: String,
#[serde(default)]
pub details: Option<Value>,
}