diff --git a/pkg/argus_wasm_bg.wasm b/pkg/argus_wasm_bg.wasm index e705a7e..0ace620 100644 Binary files a/pkg/argus_wasm_bg.wasm and b/pkg/argus_wasm_bg.wasm differ diff --git a/src/lib.rs b/src/lib.rs index c49b262..d47f356 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -101,7 +101,10 @@ pub struct StateBuddyTrace { #[wasm_bindgen] pub fn eval_boolean(s: &str, js_trace: JsValue) -> JsValue { - let trace: StateBuddyTrace = from_value(js_trace).expect("fuuuuck"); + let trace: StateBuddyTrace = match from_value(js_trace) { + Ok(trace) => trace, + Err(e) => return JsValue::from_str("failed to parse JSON"), + }; let mut traceMap = HashMap::<&str, Signal>::new(); for entry in &trace.entries { let value = traceMap.entry(entry.inputEvent.as_str()).or_insert_with(|| Signal::::Sampled { @@ -113,23 +116,31 @@ pub fn eval_boolean(s: &str, js_trace: JsValue) -> JsValue { time_points.push(Duration::from_millis(entry.simtime as u64)); } else { - panic!("fuck!!!"); + return JsValue::from_str("this should never happen"); } } let parse_result = argus::parse_str(s); - let expr = parse_result.expect("fuuuckk!!"); + let expr = match parse_result { + Ok(expr) => expr, + Err(e) => return JsValue::from_str("failed to parse expression"), + }; let eval_result = match expr { Expr::Bool(bool_expr) => BooleanSemantics::eval::(&bool_expr, &TraceMap{events: traceMap}), - _ => panic!("fuuuck"), + _ => return JsValue::from_str("expected boolean expression (this should never happen)"), }; let mut result = Vec::::new(); - eval_result.expect("fuuuck").iter().for_each(|(timestamp, satisfied), | { - result.push(StateBuddyEvalResultEntry{ - timestamp: timestamp.as_millis() as f64, - satisfied: *satisfied, + if let Ok(r) = eval_result { + r.iter().for_each(|(timestamp, satisfied), | { + result.push(StateBuddyEvalResultEntry{ + timestamp: timestamp.as_millis() as f64, + satisfied: *satisfied, + }); }); - }); + } + else { + return JsValue::from_str("failed to evaluate expression"); + } to_value(&StateBuddyEvalResult { entries: result }).expect("fuuuck") }