Skip to content

Commit

Permalink
chore(driver-adapters): continue unifying napi/wasm functions
Browse files Browse the repository at this point in the history
  • Loading branch information
jkomyno committed Nov 27, 2023
1 parent 6bedf79 commit 56fc689
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 15 deletions.
30 changes: 29 additions & 1 deletion query-engine/driver-adapters/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,42 @@ pub use wasm::*;

#[cfg(target_arch = "wasm32")]
mod arch {
use crate::JsObjectExtern as JsObject;
pub(crate) use js_sys::JsString;
use wasm_bindgen::JsValue;

pub(crate) fn get_named_property<T>(object: &JsObject, name: &str) -> JsResult<T>
where
T: From<JsValue>,
{
// object.get("queryRaw".into())?
Ok(object.get(name.into())?.into())
}

pub(crate) fn to_rust_str(value: JsString) -> JsResult<String> {
Ok(value.into())
}

pub(crate) type JsResult<T> = core::result::Result<T, JsValue>;
}

#[cfg(not(target_arch = "wasm32"))]
mod arch {
use napi::bindgen_prelude::FromNapiValue;
pub(crate) use napi::{JsObject, JsString};

pub(crate) fn get_named_property<T>(object: &JsObject, name: &str) -> JsResult<T>
where
T: FromNapiValue,
{
object.get_named_property(name).into()
}

pub(crate) fn to_rust_str(value: JsString) -> JsResult<String> {
Ok(value.into_utf8()?.as_str()?.to_string())
}

pub(crate) type JsResult<T> = napi::Result<T>;
}

pub(crate) use arch::JsResult;
pub(crate) use arch::*;
19 changes: 9 additions & 10 deletions query-engine/driver-adapters/src/napi/proxy.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
pub use crate::types::{ColumnType, JSResultSet, Query, TransactionOptions};
use crate::JsResult;
use crate::{get_named_property, to_rust_str, JsObject, JsResult, JsString};

use super::async_js_function::AsyncJsFunction;
use super::transaction::JsTransaction;
use metrics::increment_gauge;
use napi::{JsObject, JsString};
use std::sync::atomic::{AtomicBool, Ordering};

/// Proxy is a struct wrapping a javascript object that exhibits basic primitives for
Expand Down Expand Up @@ -45,12 +44,12 @@ pub(crate) struct TransactionProxy {

impl CommonProxy {
pub fn new(object: &JsObject) -> JsResult<Self> {
let flavour: JsString = object.get_named_property("flavour")?;
let flavour: JsString = get_named_property(object, "flavour")?;

Ok(Self {
query_raw: object.get_named_property("queryRaw")?,
execute_raw: object.get_named_property("executeRaw")?,
flavour: flavour.into_utf8()?.as_str()?.to_owned(),
query_raw: get_named_property(object, "queryRaw")?,
execute_raw: get_named_property(object, "executeRaw")?,
flavour: to_rust_str(flavour)?,
})
}

Expand All @@ -66,7 +65,7 @@ impl CommonProxy {
impl DriverProxy {
pub fn new(driver_adapter: &JsObject) -> JsResult<Self> {
Ok(Self {
start_transaction: driver_adapter.get_named_property("startTransaction")?,
start_transaction: get_named_property(driver_adapter, "startTransaction")?,
})
}

Expand All @@ -84,9 +83,9 @@ impl DriverProxy {

impl TransactionProxy {
pub fn new(js_transaction: &JsObject) -> JsResult<Self> {
let commit = js_transaction.get_named_property("commit")?;
let rollback = js_transaction.get_named_property("rollback")?;
let options = js_transaction.get_named_property("options")?;
let commit = get_named_property(js_transaction, "commit")?;
let rollback = get_named_property(js_transaction, "rollback")?;
let options = get_named_property(js_transaction, "options")?;
let closed = AtomicBool::new(false);

Ok(Self {
Expand Down
3 changes: 2 additions & 1 deletion query-engine/driver-adapters/src/wasm/js_object_extern.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
use js_sys::JsString;
use js_sys::{JsString, Object as JsObject};
use wasm_bindgen::{prelude::wasm_bindgen, JsValue};

#[wasm_bindgen]
extern "C" {
#[wasm_bindgen(js_name = String, extends = JsObject, is_type_of = JsValue::is_object, typescript_type = "object")]
pub type JsObjectExtern;

#[wasm_bindgen(method, catch, structural, indexing_getter)]
Expand Down
7 changes: 4 additions & 3 deletions query-engine/driver-adapters/src/wasm/proxy.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::send_future::SendFuture;
pub use crate::types::{ColumnType, JSResultSet, Query, TransactionOptions};
use crate::JsObjectExtern;
use crate::JsResult;
use crate::{get_named_property, to_rust_str, JsResult};

use super::{async_js_function::AsyncJsFunction, transaction::JsTransaction};
use futures::Future;
Expand Down Expand Up @@ -53,12 +53,13 @@ pub(crate) struct TransactionProxy {

impl CommonProxy {
pub fn new(object: &JsObjectExtern) -> JsResult<Self> {
let flavour: String = JsString::from(object.get("flavour".into())?).into();
let flavour: JsString = get_named_property(object, "flavour")?;

Ok(Self {
// TODO: remove the need for `JsFunction::from` (?)
query_raw: JsFunction::from(object.get("queryRaw".into())?).into(),
execute_raw: JsFunction::from(object.get("executeRaw".into())?).into(),
flavour,
flavour: to_rust_str(flavour)?,
})
}

Expand Down

0 comments on commit 56fc689

Please sign in to comment.