From f0d3bbf73aa7e7b74f158b43295a07cda868f984 Mon Sep 17 00:00:00 2001 From: "am@pa.dev" Date: Mon, 23 Dec 2024 15:44:01 +0800 Subject: [PATCH 1/2] fix Wasm HashMap -> JsValue conversion --- charming/src/renderer/wasm_renderer.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/charming/src/renderer/wasm_renderer.rs b/charming/src/renderer/wasm_renderer.rs index e7f2cfc..c6221c3 100644 --- a/charming/src/renderer/wasm_renderer.rs +++ b/charming/src/renderer/wasm_renderer.rs @@ -3,6 +3,7 @@ use serde::Serialize; use serde_wasm_bindgen::to_value; use wasm_bindgen::prelude::*; use wasm_bindgen::JsValue; +use web_sys::js_sys::JSON; pub struct WasmRenderer { theme: Theme, @@ -54,7 +55,7 @@ impl WasmRenderer { }) .unwrap(), ); - echarts.set_option(to_value(chart).unwrap()); + Self::update(&echarts, chart); Ok(echarts) } @@ -66,7 +67,9 @@ impl WasmRenderer { } pub fn update(echarts: &Echarts, chart: &Chart) { - echarts.set_option(to_value(chart).unwrap()); + let json_str = serde_json::to_string(chart).unwrap(); + let option = JSON::parse(&json_str).unwrap(); + echarts.set_option(option); } } From 6e4e32e9dce9625c48f0cac737f9cece92290c38 Mon Sep 17 00:00:00 2001 From: "am@pa.dev" Date: Mon, 23 Dec 2024 16:31:47 +0800 Subject: [PATCH 2/2] add js_sys --- Cargo.lock | 1 + charming/Cargo.toml | 3 ++- charming/src/renderer/wasm_renderer.rs | 3 +-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e050724..9bc1a82 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -354,6 +354,7 @@ dependencies = [ "deno_core", "handlebars", "image", + "js-sys", "resvg", "serde", "serde-wasm-bindgen", diff --git a/charming/Cargo.toml b/charming/Cargo.toml index 42423d3..6a65201 100644 --- a/charming/Cargo.toml +++ b/charming/Cargo.toml @@ -22,6 +22,7 @@ serde_json = "1.0" serde_v8 = { version = "0.220", optional = true } serde_with = "3.11.0" wasm-bindgen = { version = "0.2", optional = true } +js-sys = { version = "0.3", optional = true } [dev-dependencies] assert-json-diff = "2.0.2" @@ -39,7 +40,7 @@ features = [ default = ["html"] html = ["handlebars"] ssr = ["html", "deno_core", "image", "resvg", "serde_v8"] -wasm = ["serde-wasm-bindgen", "wasm-bindgen", "web-sys"] +wasm = ["serde-wasm-bindgen", "wasm-bindgen", "web-sys", "js-sys"] [package.metadata.docs.rs] all-features = true diff --git a/charming/src/renderer/wasm_renderer.rs b/charming/src/renderer/wasm_renderer.rs index c6221c3..65b92e5 100644 --- a/charming/src/renderer/wasm_renderer.rs +++ b/charming/src/renderer/wasm_renderer.rs @@ -3,7 +3,6 @@ use serde::Serialize; use serde_wasm_bindgen::to_value; use wasm_bindgen::prelude::*; use wasm_bindgen::JsValue; -use web_sys::js_sys::JSON; pub struct WasmRenderer { theme: Theme, @@ -68,7 +67,7 @@ impl WasmRenderer { pub fn update(echarts: &Echarts, chart: &Chart) { let json_str = serde_json::to_string(chart).unwrap(); - let option = JSON::parse(&json_str).unwrap(); + let option = js_sys::JSON::parse(&json_str).unwrap(); echarts.set_option(option); } }