use derive_more::with_trait::From;
use js_sys::Promise;
use wasm_bindgen::prelude::*;
use wasm_bindgen_futures::future_to_promise;
use crate::{
api::{Error, MediaManagerHandle, RoomHandle},
jason,
};
#[wasm_bindgen]
#[derive(Debug, Default, From)]
pub struct Jason(jason::JasonImpl);
#[wasm_bindgen]
impl Jason {
#[must_use]
#[wasm_bindgen(constructor)]
pub fn new() -> Self {
Self(jason::JasonImpl::new(None))
}
#[must_use]
pub fn init_room(&self) -> RoomHandle {
self.0.init_room().into()
}
#[must_use]
pub fn media_manager(&self) -> MediaManagerHandle {
self.0.media_manager().into()
}
pub fn close_room(&self, room_to_delete: RoomHandle) {
self.0.close_room(&room_to_delete.into());
}
pub fn network_changed(&self) -> Promise {
let fut = self.0.network_changed();
future_to_promise(async move {
fut.await.map_err(Error::from)?;
Ok(JsValue::UNDEFINED)
})
}
pub fn dispose(self) {
self.0.dispose();
}
}