Skip to content

Commit

Permalink
Combine ReadResult type for default and BYOB reader
Browse files Browse the repository at this point in the history
  • Loading branch information
MattiasBuelens committed Oct 7, 2023
1 parent 5bc94c6 commit af46fba
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 34 deletions.
18 changes: 9 additions & 9 deletions src/readable/byob_reader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,15 +117,15 @@ impl<'stream> ReadableStreamBYOBReader<'stream> {
let view = buffer.subarray(0, dst_len).unchecked_into::<Object>();
// Read into view. This transfers `buffer.buffer()`.
let promise = self.as_raw().read_with_array_buffer_view(&view);
let js_value = JsFuture::from(promise).await?;
let result = sys::ReadableStreamBYOBReadResult::from(js_value);
let filled_view = match result.value() {
Some(view) => view,
None => {
// No new view was returned. The stream must have been canceled.
assert!(result.is_done());
return Ok((0, None));
}
let js_result = JsFuture::from(promise).await?;
let result = sys::ReadableStreamReadResult::from(js_result);
let js_value = result.value();
let filled_view = if js_value.is_undefined() {
// No new view was returned. The stream must have been canceled.
assert!(result.is_done());
return Ok((0, None));
} else {
js_value.unchecked_into::<Uint8Array>()
};
let filled_len = checked_cast_to_usize(filled_view.byte_length());
debug_assert!(filled_len <= dst.len());
Expand Down
4 changes: 2 additions & 2 deletions src/readable/default_reader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ impl<'stream> ReadableStreamDefaultReader<'stream> {
/// * If the stream encounters an `error`, this returns `Err(error)`.
pub async fn read(&mut self) -> Result<Option<JsValue>, JsValue> {
let promise = self.as_raw().read();
let js_value = JsFuture::from(promise).await?;
let result = sys::ReadableStreamDefaultReadResult::from(js_value);
let js_result = JsFuture::from(promise).await?;
let result = sys::ReadableStreamReadResult::from(js_result);
if result.is_done() {
Ok(None)
} else {
Expand Down
6 changes: 3 additions & 3 deletions src/readable/into_async_read.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use wasm_bindgen_futures::JsFuture;

use crate::util::{checked_cast_to_usize, clamp_to_u32, js_to_io_error};

use super::sys::ReadableStreamBYOBReadResult;
use super::sys::ReadableStreamReadResult;
use super::ReadableStreamBYOBReader;

/// An [`AsyncRead`] for the [`into_async_read`](super::ReadableStream::into_async_read) method.
Expand Down Expand Up @@ -107,14 +107,14 @@ impl<'reader> AsyncRead for IntoAsyncRead<'reader> {
// Read completed
Poll::Ready(match js_result {
Ok(js_value) => {
let result = ReadableStreamBYOBReadResult::from(js_value);
let result = ReadableStreamReadResult::from(js_value);
if result.is_done() {
// End of stream
self.discard_reader();
Ok(0)
} else {
// Cannot be canceled, so view must exist
let filled_view = result.value().unwrap_throw();
let filled_view = result.value().unchecked_into::<Uint8Array>();
// Copy bytes to output buffer
let filled_len = checked_cast_to_usize(filled_view.byte_length());
debug_assert!(filled_len <= buf.len());
Expand Down
4 changes: 2 additions & 2 deletions src/readable/into_stream.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use futures_util::FutureExt;
use wasm_bindgen::prelude::*;
use wasm_bindgen_futures::JsFuture;

use super::sys::ReadableStreamDefaultReadResult;
use super::sys::ReadableStreamReadResult;
use super::ReadableStreamDefaultReader;

/// A [`Stream`] for the [`into_stream`](super::ReadableStream::into_stream) method.
Expand Down Expand Up @@ -87,7 +87,7 @@ impl<'reader> Stream for IntoStream<'reader> {
// Read completed
Poll::Ready(match js_result {
Ok(js_value) => {
let result = ReadableStreamDefaultReadResult::from(js_value);
let result = ReadableStreamReadResult::from(js_value);
if result.is_done() {
// End of stream, drop reader
self.reader = None;
Expand Down
24 changes: 6 additions & 18 deletions src/readable/sys.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//! Raw bindings to JavaScript objects used
//! by a [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream).
//! These are re-exported from [web-sys](https://docs.rs/web-sys/0.3.64/web_sys/struct.ReadableStream.html).
use js_sys::{Array, Error, Object, Uint8Array};
use js_sys::{Array, Error, Object};
use wasm_bindgen::prelude::*;
use web_sys::QueuingStrategy;
pub use web_sys::ReadableByteStreamController;
Expand Down Expand Up @@ -60,26 +60,14 @@ extern "C" {

#[wasm_bindgen]
extern "C" {
/// A result returned by [`ReadableStreamDefaultReader.read`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamDefaultReader/read).
/// A result returned by [`ReadableStreamDefaultReader.read`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamDefaultReader/read)
/// or [`ReadableStreamBYOBReader.read`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamBYOBReader/read).
#[derive(Clone, Debug)]
pub(crate) type ReadableStreamDefaultReadResult;
pub(crate) type ReadableStreamReadResult;

#[wasm_bindgen(method, getter, js_name = done)]
pub(crate) fn is_done(this: &ReadableStreamDefaultReadResult) -> bool;
pub(crate) fn is_done(this: &ReadableStreamReadResult) -> bool;

#[wasm_bindgen(method, getter, js_name = value)]
pub(crate) fn value(this: &ReadableStreamDefaultReadResult) -> JsValue;
}

#[wasm_bindgen]
extern "C" {
/// A result returned by [`ReadableStreamBYOBReader.read`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamBYOBReader/read).
#[derive(Clone, Debug)]
pub(crate) type ReadableStreamBYOBReadResult;

#[wasm_bindgen(method, getter, js_name = done)]
pub(crate) fn is_done(this: &ReadableStreamBYOBReadResult) -> bool;

#[wasm_bindgen(method, getter, js_name = value)]
pub(crate) fn value(this: &ReadableStreamBYOBReadResult) -> Option<Uint8Array>;
pub(crate) fn value(this: &ReadableStreamReadResult) -> JsValue;
}

0 comments on commit af46fba

Please sign in to comment.