pub mod codec_capability;
pub mod constraints;
pub mod error;
pub mod ice_server;
pub mod media_device_info;
pub mod media_devices;
pub mod media_track;
pub mod peer_connection;
pub mod rtc_stats;
pub mod send_encoding_parameters;
pub mod transceiver;
pub mod transport;
pub mod utils;
use std::time::Duration;
use futures::Future;
use js_sys::{Promise, Reflect};
use wasm_bindgen::JsValue;
use wasm_bindgen_futures::JsFuture;
use web_sys::Window;
pub use self::{
codec_capability::CodecCapability,
constraints::{DisplayMediaStreamConstraints, MediaStreamConstraints},
error::Error,
media_device_info::MediaDeviceInfo,
media_devices::MediaDevices,
media_track::MediaStreamTrack,
peer_connection::RtcPeerConnection,
rtc_stats::RtcStats,
transceiver::{Transceiver, TransceiverInit},
transport::WebSocketRpcTransport,
utils::Function,
};
pub type MediaDisplayInfo = ();
#[cfg(feature = "wee_alloc")]
#[global_allocator]
static ALLOC: wee_alloc::WeeAlloc<'_> = wee_alloc::WeeAlloc::INIT;
#[cfg(feature = "console_error_panic_hook")]
pub use console_error_panic_hook::set_once as set_panic_hook;
pub fn init_logger() {
wasm_logger::init(wasm_logger::Config::default());
}
pub fn spawn<F>(task: F)
where
F: Future<Output = ()> + 'static,
{
wasm_bindgen_futures::spawn_local(task);
}
#[allow(clippy::unwrap_used)]
pub async fn delay_for(delay: Duration) {
let delay_ms = delay.as_millis().try_into().unwrap_or(i32::MAX);
JsFuture::from(Promise::new(&mut |yes, _| {
_ = window()
.set_timeout_with_callback_and_timeout_and_arguments_0(
&yes, delay_ms,
)
.unwrap();
}))
.await
.map(drop)
.unwrap();
}
pub fn get_property_by_name<T, F, U>(
value: &T,
name: &str,
into: F,
) -> Option<U>
where
T: AsRef<JsValue>,
F: Fn(JsValue) -> Option<U>,
{
Reflect::get(value.as_ref(), &JsValue::from_str(name))
.ok()
.map_or_else(|| None, into)
}
#[must_use]
pub fn window() -> Window {
#![allow(clippy::unwrap_used)] web_sys::window().unwrap()
}
#[derive(Debug)]
pub struct IntervalHandle(pub i32);
impl Drop for IntervalHandle {
fn drop(&mut self) {
window().clear_interval_with_handle(self.0);
}
}