Move the wasm lib, and cleanup rust directory and all references (#5585)
* git mv src/wasm-lib rust Signed-off-by: Jess Frazelle <github@jessfraz.com> * mv wasm-lib to workspace Signed-off-by: Jess Frazelle <github@jessfraz.com> * mv kcl-lib Signed-off-by: Jess Frazelle <github@jessfraz.com> * mv derive docs Signed-off-by: Jess Frazelle <github@jessfraz.com> * resolve file paths Signed-off-by: Jess Frazelle <github@jessfraz.com> * clippy Signed-off-by: Jess Frazelle <github@jessfraz.com> * move more shit Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix more paths Signed-off-by: Jess Frazelle <github@jessfraz.com> * make yarn build:wasm work Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix scripts Signed-off-by: Jess Frazelle <github@jessfraz.com> * fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> * better references Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix cargo ci Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix reference Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix more ci Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix tests Signed-off-by: Jess Frazelle <github@jessfraz.com> * cargo sort Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix script Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix Signed-off-by: Jess Frazelle <github@jessfraz.com> * fmt Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix a dep Signed-off-by: Jess Frazelle <github@jessfraz.com> * sort Signed-off-by: Jess Frazelle <github@jessfraz.com> * remove unused deps Signed-off-by: Jess Frazelle <github@jessfraz.com> * Revert "remove unused deps" This reverts commit fbabdb062e275fd5cbc1476f8480a1afee15d972. * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * deps; Signed-off-by: Jess Frazelle <github@jessfraz.com> * fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> --------- Signed-off-by: Jess Frazelle <github@jessfraz.com>
This commit is contained in:
66
rust/kcl-lib/src/wasm/mod.rs
Normal file
66
rust/kcl-lib/src/wasm/mod.rs
Normal file
@ -0,0 +1,66 @@
|
||||
//! Web assembly utils.
|
||||
use std::{
|
||||
pin::Pin,
|
||||
task::{Context, Poll},
|
||||
};
|
||||
|
||||
/// A JsFuture that implements Send and Sync.
|
||||
pub struct JsFuture(pub Option<wasm_bindgen_futures::JsFuture>);
|
||||
|
||||
// Safety: WebAssembly will only ever run in a single-threaded context.
|
||||
unsafe impl Send for JsFuture {}
|
||||
unsafe impl Sync for JsFuture {}
|
||||
|
||||
impl std::future::Future for JsFuture {
|
||||
type Output = Result<wasm_bindgen::JsValue, wasm_bindgen::JsValue>;
|
||||
|
||||
fn poll(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Self::Output> {
|
||||
if let Some(future) = &mut self.get_mut().0 {
|
||||
let mut pinned = std::pin::pin!(future);
|
||||
match pinned.as_mut().poll(cx) {
|
||||
Poll::Ready(Ok(value)) => Poll::Ready(Ok(value)),
|
||||
Poll::Ready(Err(err)) => Poll::Ready(Err(err)),
|
||||
Poll::Pending => Poll::Pending,
|
||||
}
|
||||
} else {
|
||||
Poll::Ready(Err(wasm_bindgen::JsValue::from_str("Future has already been dropped")))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for JsFuture {
|
||||
fn drop(&mut self) {
|
||||
if let Some(t) = self.0.take() {
|
||||
drop(t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<js_sys::Promise> for JsFuture {
|
||||
fn from(promise: js_sys::Promise) -> JsFuture {
|
||||
JsFuture(Some(wasm_bindgen_futures::JsFuture::from(promise)))
|
||||
}
|
||||
}
|
||||
|
||||
/// A Promise that implements Send and Sync.
|
||||
pub struct Promise(pub Option<js_sys::Promise>);
|
||||
|
||||
// Safety: WebAssembly will only ever run in a single-threaded context.
|
||||
unsafe impl Send for Promise {}
|
||||
unsafe impl Sync for Promise {}
|
||||
|
||||
impl From<js_sys::Promise> for Promise {
|
||||
fn from(promise: js_sys::Promise) -> Promise {
|
||||
Promise(Some(promise))
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for Promise {
|
||||
fn drop(&mut self) {
|
||||
// Turn it into a future and drop it.
|
||||
if let Some(t) = self.0.take() {
|
||||
let future = wasm_bindgen_futures::JsFuture::from(t);
|
||||
drop(future);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user