From bfce49c7eba2993d5fd83c0e751bda4dd267db0a Mon Sep 17 00:00:00 2001 From: Pekka Enberg Date: Wed, 20 Nov 2024 11:54:07 +0200 Subject: [PATCH] bindings/wasm: Fix conversion to JsValue --- bindings/wasm/lib.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/bindings/wasm/lib.rs b/bindings/wasm/lib.rs index 2f5fca0a7..2e1d0dd22 100644 --- a/bindings/wasm/lib.rs +++ b/bindings/wasm/lib.rs @@ -71,7 +71,8 @@ impl Statement { Ok(limbo_core::RowResult::Row(row)) => { let row_array = js_sys::Array::new(); for value in row.values { - row_array.push(&JsValue::from_str(&value.to_string())); + let value = to_js_value(value); + row_array.push(&value); } array.push(&row_array); } @@ -84,6 +85,22 @@ impl Statement { } } +fn to_js_value(value: limbo_core::Value) -> JsValue { + match value { + limbo_core::Value::Null => JsValue::null(), + limbo_core::Value::Integer(i) => { + if i >= i32::MIN as i64 && i <= i32::MAX as i64 { + JsValue::from(i as i32) + } else { + JsValue::from(i) + } + } + limbo_core::Value::Float(f) => JsValue::from(f), + limbo_core::Value::Text(t) => JsValue::from_str(t), + limbo_core::Value::Blob(b) => js_sys::Uint8Array::from(b.as_slice()).into(), + } +} + pub struct File { vfs: VFS, fd: i32,