FastWave2.0/frontend/src/script_bridge.rs

70 lines
2.1 KiB
Rust
Raw Normal View History

2024-06-16 16:29:25 +00:00
use crate::STORE;
use wellen::GetItem;
2024-06-16 16:29:25 +00:00
use zoon::*;
2024-06-15 21:15:28 +00:00
type FullVarName = String;
2024-06-16 16:29:25 +00:00
#[wasm_bindgen(
inline_js = r#"export function strict_eval(code) { "use strict"; return eval?.(`${code}`) }"#
)]
2024-06-15 21:15:28 +00:00
extern "C" {
#[wasm_bindgen(catch)]
pub fn strict_eval(code: &str) -> Result<JsValue, JsValue>;
}
#[wasm_bindgen]
pub struct FW;
#[wasm_bindgen]
impl FW {
/// JS: `FW.say_hello()` -> `Hello!`
2024-06-16 16:29:25 +00:00
pub fn say_hello() -> String {
"Hello!".to_owned()
2024-06-15 21:15:28 +00:00
}
/// JS: `FW.clear_selected_vars()` -> `4`
pub fn clear_selected_vars() -> usize {
2024-06-16 16:29:25 +00:00
let mut vars = STORE.selected_var_refs.lock_mut();
let var_count = vars.len();
vars.clear();
var_count
}
/// JS: `FW.select_vars(["simple_tb.s.A", "simple_tb.s.B"])` -> `2`
pub fn select_vars(full_var_names: Vec<FullVarName>) -> usize {
if let Some(hierarchy) = STORE.hierarchy.get_cloned() {
let mut new_var_refs = Vec::new();
for full_var_name in full_var_names {
let path_with_name = full_var_name.split_terminator('.').collect::<Vec<_>>();
if let Some((name, path)) = path_with_name.split_last() {
if let Some(var_ref) = hierarchy.lookup_var(path, name) {
new_var_refs.push(var_ref);
}
}
}
let var_ref_count = new_var_refs.len();
STORE.selected_var_refs.lock_mut().replace(new_var_refs);
return var_ref_count;
}
0
}
pub fn loaded_filename() -> String {
format!("todo loaded filename")
}
/// JS: `FW.selected_vars()` -> `["simple_tb.s.A", "simple_tb.s.B"]`
pub fn selected_vars() -> Vec<FullVarName> {
if let Some(hierarchy) = STORE.hierarchy.get_cloned() {
let mut full_var_names = Vec::new();
for var_ref in STORE.selected_var_refs.lock_ref().as_slice() {
let var = hierarchy.get(*var_ref);
let var_name = var.full_name(&hierarchy);
full_var_names.push(var_name);
}
return full_var_names;
}
Vec::new()
2024-06-15 21:15:28 +00:00
}
}