use fidc_core::factor_events::{self, Expr, Frame}; use serde::Deserialize; use serde_json::{Value, json}; use std::io::{self, Read}; #[derive(Deserialize)] #[serde(deny_unknown_fields)] struct Request { expressions: std::collections::BTreeMap, frame: Frame, } fn main() -> Result<(), Box> { let mut input = String::new(); io::stdin().read_to_string(&mut input)?; let output = if input.trim().is_empty() { factor_events::catalog() } else { let request: Request = serde_json::from_str(&input)?; let results = request .expressions .iter() .map(|(id, expr)| { let result = match factor_events::evaluate(expr, &request.frame) { Ok(v) => json!({"result":v}), Err(e) => json!({"error":e}), }; (id.clone(), result) }) .collect::>(); json!({"contract":factor_events::CONTRACT,"results":results,"read_only":true}) }; println!("{}", serde_json::to_string(&output)?); Ok(()) }