Skip to content

Commit

Permalink
Expose WASM methods for getting and setting signal and data values (#272
Browse files Browse the repository at this point in the history
)

* Expose public get/set signal/data value function on MsgReceiver

* package-lock.json

* Add {set|get}_state and run_(async) methods
  • Loading branch information
jonmmease authored Mar 21, 2023
1 parent 78014b3 commit 4876ac6
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 18 deletions.
6 changes: 3 additions & 3 deletions javascript/vegafusion-embed/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 11 additions & 11 deletions python/vegafusion-jupyter/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

48 changes: 44 additions & 4 deletions vegafusion-wasm/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -125,14 +125,45 @@ impl MsgReceiver {
this
}

pub fn get_signal(&self, name: &str, scope: &[u32]) -> JsValue {
get_signal_value(self.view.as_ref(), name, scope)
}

pub fn get_data(&self, name: &str, scope: &[u32]) -> JsValue {
get_data_value(self.view.as_ref(), name, scope)
}

pub fn set_signal(&self, name: &str, scope: &[u32], value: JsValue) {
set_signal_value(self.view.as_ref(), name, scope, value);
}

pub fn set_data(&self, name: &str, scope: &[u32], value: JsValue) {
set_data_value(self.view.as_ref(), name, scope, value);
}

pub fn get_state(&self) -> JsValue {
self.view.get_state()
}

pub fn set_state(&self, state: JsValue) {
self.view.set_state(state)
}

pub fn run(&self) {
self.view.run()
}

pub fn run_async(&self) -> Promise {
self.view.run_async()
}

pub fn receive(&mut self, bytes: Vec<u8>) {
// Decode message
let response = QueryResult::decode(bytes.as_slice()).unwrap();

if let Some(response) = response.response {
match response {
query_result::Response::TaskGraphValues(task_graph_vals) => {
let view = self.view();
for (var, scope, value) in task_graph_vals
.deserialize()
.expect("Failed to deserialize response")
Expand All @@ -149,7 +180,7 @@ impl MsgReceiver {
let js_value =
js_sys::JSON::parse(&serde_json::to_string(&json).unwrap())
.unwrap();
set_signal_value(view, &var.name, scope.as_slice(), js_value);
self.set_signal(&var.name, scope.as_slice(), js_value);
}
TaskValue::Table(value) => {
let json = value.to_json().expect("Failed to serialize table");
Expand All @@ -162,11 +193,11 @@ impl MsgReceiver {
let js_value =
js_sys::JSON::parse(&serde_json::to_string(&json).unwrap())
.unwrap();

set_data_value(view, &var.name, scope.as_slice(), js_value);
self.set_data(&var.name, scope.as_slice(), js_value);
}
}
}
let view = self.view();
view.run();
}
query_result::Response::Error(error) => {
Expand Down Expand Up @@ -487,9 +518,18 @@ extern "C" {
#[wasm_bindgen(method, js_name = "run")]
pub fn run(this: &View);

#[wasm_bindgen(method, js_name = "runAsync")]
pub fn run_async(this: &View) -> Promise;

#[wasm_bindgen(method, js_name = "hover")]
pub fn hover(this: &View);

#[wasm_bindgen(method, js_name = "getState")]
pub fn get_state(this: &View) -> JsValue;

#[wasm_bindgen(method, js_name = "setState")]
pub fn set_state(this: &View, state: JsValue);

#[wasm_bindgen(method, js_name = "toImageURL")]
pub fn to_image_url(this: &View, img_type: &str, scale_factor: f64) -> Promise;
}
Expand Down

0 comments on commit 4876ac6

Please sign in to comment.