Files
zen/bindings/nodejs/src/expression.rs
T
stefan-gorules ebba323366 fix: rename templates crate (#140)
* fix: rename templates crate

* fix: update workflow
2024-04-03 16:45:22 +02:00

57 lines
1.8 KiB
Rust

use napi::anyhow::anyhow;
use napi_derive::napi;
use serde_json::Value;
#[napi]
pub fn evaluate_expression_sync(expression: String, context: Option<Value>) -> napi::Result<Value> {
let ctx = context.unwrap_or(Value::Null);
Ok(
zen_expression::evaluate_expression(expression.as_str(), &ctx)
.map_err(|e| anyhow!(serde_json::to_string(&e).unwrap_or_else(|_| e.to_string())))?,
)
}
#[allow(dead_code)]
#[napi]
pub fn evaluate_unary_expression_sync(expression: String, context: Value) -> napi::Result<bool> {
Ok(
zen_expression::evaluate_unary_expression(expression.as_str(), &context)
.map_err(|e| anyhow!(serde_json::to_string(&e).unwrap_or_else(|_| e.to_string())))?,
)
}
#[allow(dead_code)]
#[napi]
pub fn render_template_sync(template: String, context: Value) -> napi::Result<Value> {
Ok(zen_tmpl::render(template.as_str(), &context)
.map_err(|e| anyhow!(serde_json::to_string(&e).unwrap_or_else(|_| e.to_string())))?)
}
#[allow(dead_code)]
#[napi]
pub async fn evaluate_expression(
expression: String,
context: Option<Value>,
) -> napi::Result<Value> {
napi::tokio::spawn(async move { evaluate_expression_sync(expression, context) })
.await
.map_err(|_| anyhow!("Hook timed out"))?
}
#[allow(dead_code)]
#[napi]
pub async fn evaluate_unary_expression(expression: String, context: Value) -> napi::Result<bool> {
napi::tokio::spawn(async move { evaluate_unary_expression_sync(expression, context) })
.await
.map_err(|_| anyhow!("Hook timed out"))?
}
#[allow(dead_code)]
#[napi]
pub async fn render_template(template: String, context: Value) -> napi::Result<Value> {
napi::tokio::spawn(async move { render_template_sync(template, context) })
.await
.map_err(|_| anyhow!("Hook timed out"))?
}