Skip to main content

web_streams/
writer.rs

1use wasm_bindgen::prelude::*;
2use wasm_bindgen_futures::JsFuture;
3use web_sys::{WritableStream, WritableStreamDefaultWriter};
4
5use crate::{Error, PromiseExt};
6
7// Wrapper around WritableStream
8pub struct Writer {
9	inner: WritableStreamDefaultWriter,
10}
11
12impl Writer {
13	pub fn new(stream: &WritableStream) -> Result<Self, Error> {
14		let inner = stream.get_writer()?.unchecked_into();
15		Ok(Self { inner })
16	}
17
18	pub async fn write(&mut self, v: &JsValue) -> Result<(), Error> {
19		JsFuture::from(self.inner.write_with_chunk(v)).await?;
20		Ok(())
21	}
22
23	pub fn close(&mut self) {
24		self.inner.close().ignore();
25	}
26
27	pub fn abort(&mut self, reason: &str) {
28		let str = JsValue::from_str(reason);
29		self.inner.abort_with_reason(&str).ignore();
30	}
31
32	pub async fn closed(&self) -> Result<(), Error> {
33		JsFuture::from(self.inner.closed()).await?;
34		Ok(())
35	}
36}
37
38impl Drop for Writer {
39	fn drop(&mut self) {
40		self.inner.release_lock();
41	}
42}