use serde_wasm_bindgen instead

This commit is contained in:
Joeri Exelmans 2025-11-04 10:20:51 +01:00
parent 97192d31be
commit dfa49c1c01

View file

@ -3,6 +3,7 @@ extern crate argus;
extern crate serde_json; extern crate serde_json;
extern crate js_sys; extern crate js_sys;
extern crate serde; extern crate serde;
extern crate serde_wasm_bindgen;
use wasm_bindgen::prelude::*; use wasm_bindgen::prelude::*;
@ -12,6 +13,7 @@ use argus::signals::interpolation;
use std::collections::HashMap; use std::collections::HashMap;
use std::vec; use std::vec;
use serde::{Serialize, Deserialize}; use serde::{Serialize, Deserialize};
use serde_wasm_bindgen::{from_value, to_value};
use std::time::Duration; use std::time::Duration;
// #[wasm_bindgen] // #[wasm_bindgen]
@ -76,21 +78,30 @@ impl<'a> Trace for TraceMap<'a> {
// } // }
// } // }
#[wasm_bindgen(getter_with_clone)] #[derive(Serialize, Deserialize)]
pub struct StateBuddyTraceEntry { pub struct StateBuddyTraceEntry {
simtime: f64, simtime: f64,
inputEvent: String, inputEvent: String,
outputEvents: Vec<String>, outputEvents: Vec<String>,
} }
#[wasm_bindgen] #[derive(Serialize, Deserialize)]
pub struct StateBuddyTrace { pub struct StateBuddyTrace {
entries: Vec<StateBuddyTraceEntry>, entries: Vec<StateBuddyTraceEntry>,
} }
// #[wasm_bindgen]
// impl StateBuddyTrace {
// #[wasm_bindgen(constructor)]
// pub fn new(entries: &Vec<StateBuddyTraceEntry>) {
// StateBuddyTrace{entries}
// }
// }
#[wasm_bindgen] #[wasm_bindgen]
pub fn eval_boolean(s: &str, trace: &StateBuddyTrace) -> StateBuddyEvalResult { pub fn eval_boolean(s: &str, js_trace: JsValue) -> JsValue {
let trace: StateBuddyTrace = from_value(js_trace).expect("fuuuuck");
let mut traceMap = HashMap::<&str, Signal<bool>>::new(); let mut traceMap = HashMap::<&str, Signal<bool>>::new();
for entry in &trace.entries { for entry in &trace.entries {
let value = traceMap.entry(entry.inputEvent.as_str()).or_insert_with(|| Signal::<bool>::Sampled { let value = traceMap.entry(entry.inputEvent.as_str()).or_insert_with(|| Signal::<bool>::Sampled {
@ -119,16 +130,16 @@ pub fn eval_boolean(s: &str, trace: &StateBuddyTrace) -> StateBuddyEvalResult {
satisfied: *satisfied, satisfied: *satisfied,
}); });
}); });
StateBuddyEvalResult { entries: result } to_value(&StateBuddyEvalResult { entries: result }).expect("fuuuck")
} }
#[wasm_bindgen] #[derive(Serialize, Deserialize)]
pub struct StateBuddyEvalResultEntry { pub struct StateBuddyEvalResultEntry {
timestamp: f64, timestamp: f64,
satisfied: bool, satisfied: bool,
} }
#[wasm_bindgen] #[derive(Serialize, Deserialize)]
pub struct StateBuddyEvalResult { pub struct StateBuddyEvalResult {
entries: Vec<StateBuddyEvalResultEntry>, entries: Vec<StateBuddyEvalResultEntry>,
} }