moq-web 0.4.6

Web implementation for MoQ utilizing WebAssembly+Typescript
use std::sync::Arc;

use moq_karp::moq_transfork;
use moq_transfork::web_transport;
use wasm_bindgen::JsValue;

#[derive(Clone, Debug, thiserror::Error)]
pub enum Error {
	#[error("transfork error: {0}")]
	Transfork(#[from] moq_transfork::Error),

	#[error("webtransport error: {0}")]
	WebTransport(#[from] web_transport::Error),

	#[error("webcodecs error: {0}")]
	WebCodecs(#[from] web_codecs::Error),

	#[error("streams error: {0}")]
	Streams(#[from] web_streams::Error),

	#[error("karp error: {0}")]
	Karp(#[from] moq_karp::Error),

	#[error("invalid url: {0}")]
	InvalidUrl(String),

	#[error("invalid fingerprint")]
	InvalidFingerprint,

	#[error("offline")]
	Offline,

	#[error("unsupported")]
	Unsupported,

	#[error("closed")]
	Closed,

	#[error("capture failed")]
	InitFailed,

	#[error("http error: {0}")]
	Http(Arc<gloo_net::Error>),
}

pub type Result<T> = std::result::Result<T, Error>;

impl From<Error> for JsValue {
	fn from(err: Error) -> JsValue {
		JsValue::from_str(&format!("{}", err))
	}
}

impl From<gloo_net::Error> for Error {
	fn from(err: gloo_net::Error) -> Self {
		Error::Http(Arc::new(err))
	}
}