From 4f46089fce018d6c594338d7fb2a6719744ec1a1 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Mon, 7 Feb 2022 10:17:16 -0500 Subject: [PATCH] feat: use serde-wasm-bindgen crate for speedup --- packages/interpreter/src/bindings.rs | 12 +++++++++--- packages/web/Cargo.toml | 1 + packages/web/src/dom.rs | 24 +++++++++++++++++------- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/packages/interpreter/src/bindings.rs b/packages/interpreter/src/bindings.rs index fa96e3230..e5cd4480c 100644 --- a/packages/interpreter/src/bindings.rs +++ b/packages/interpreter/src/bindings.rs @@ -31,7 +31,7 @@ extern "C" { pub fn Remove(this: &Interpreter, root: u64); #[wasm_bindgen(method)] - pub fn CreateTextNode(this: &Interpreter, text: &str, root: u64); + pub fn CreateTextNode(this: &Interpreter, text: JsValue, root: u64); #[wasm_bindgen(method)] pub fn CreateElement(this: &Interpreter, tag: &str, root: u64); @@ -49,10 +49,16 @@ extern "C" { pub fn RemoveEventListener(this: &Interpreter, root: u64, name: &str); #[wasm_bindgen(method)] - pub fn SetText(this: &Interpreter, root: u64, text: &str); + pub fn SetText(this: &Interpreter, root: u64, text: JsValue); #[wasm_bindgen(method)] - pub fn SetAttribute(this: &Interpreter, root: u64, field: &str, value: &str, ns: Option<&str>); + pub fn SetAttribute( + this: &Interpreter, + root: u64, + field: &str, + value: JsValue, + ns: Option<&str>, + ); #[wasm_bindgen(method)] pub fn RemoveAttribute(this: &Interpreter, root: u64, field: &str); diff --git a/packages/web/Cargo.toml b/packages/web/Cargo.toml index 57fc797df..7a3baa955 100644 --- a/packages/web/Cargo.toml +++ b/packages/web/Cargo.toml @@ -29,6 +29,7 @@ gloo-timers = { version = "0.2.3", features = ["futures"] } futures-util = "0.3.19" smallstr = "0.2.0" dioxus-interpreter-js = { path = "../interpreter", version = "^0.0.0", features = ["web"] } +serde-wasm-bindgen = "0.4.2" [dependencies.web-sys] version = "0.3.56" diff --git a/packages/web/src/dom.rs b/packages/web/src/dom.rs index 555e04e43..c722ab737 100644 --- a/packages/web/src/dom.rs +++ b/packages/web/src/dom.rs @@ -105,9 +105,7 @@ impl WebsysDom { DomEdit::InsertAfter { root, n } => self.interpreter.InsertAfter(root, n), DomEdit::InsertBefore { root, n } => self.interpreter.InsertBefore(root, n), DomEdit::Remove { root } => self.interpreter.Remove(root), - DomEdit::CreateTextNode { text, root } => { - self.interpreter.CreateTextNode(text, root) - } + DomEdit::CreateElement { tag, root } => self.interpreter.CreateElement(tag, root), DomEdit::CreateElementNs { tag, root, ns } => { self.interpreter.CreateElementNs(tag, root, ns) @@ -123,15 +121,27 @@ impl WebsysDom { DomEdit::RemoveEventListener { root, event } => { self.interpreter.RemoveEventListener(root, event) } - DomEdit::SetText { root, text } => self.interpreter.SetText(root, text), + + DomEdit::RemoveAttribute { root, name } => { + self.interpreter.RemoveAttribute(root, name) + } + + DomEdit::CreateTextNode { text, root } => { + let text = serde_wasm_bindgen::to_value(text).unwrap(); + self.interpreter.CreateTextNode(text, root) + } + DomEdit::SetText { root, text } => { + let text = serde_wasm_bindgen::to_value(text).unwrap(); + self.interpreter.SetText(root, text) + } DomEdit::SetAttribute { root, field, value, ns, - } => self.interpreter.SetAttribute(root, field, value, ns), - DomEdit::RemoveAttribute { root, name } => { - self.interpreter.RemoveAttribute(root, name) + } => { + let value = serde_wasm_bindgen::to_value(value).unwrap(); + self.interpreter.SetAttribute(root, field, value, ns) } } }