wasm_streams/readable/pipe_options.rs
1use web_sys::AbortSignal;
2
3use super::sys;
4
5/// Options for [`pipe_to_with_options`](super::ReadableStream::pipe_to_with_options).
6#[derive(Clone, Debug, Default)]
7pub struct PipeOptions {
8 prevent_close: bool,
9 prevent_cancel: bool,
10 prevent_abort: bool,
11 signal: Option<AbortSignal>,
12}
13
14impl PipeOptions {
15 /// Creates a blank new set of pipe options.
16 ///
17 /// Equivalent to [`PipeOptions::default`](Default::default).
18 pub fn new() -> Self {
19 Default::default()
20 }
21
22 /// Creates a set of pipe options from a raw [`PipeOptions`](sys::PipeOptions) object.
23 pub fn from_raw(raw: sys::PipeOptions) -> Self {
24 Self {
25 prevent_close: raw.prevent_close(),
26 prevent_cancel: raw.prevent_cancel(),
27 prevent_abort: raw.prevent_abort(),
28 signal: raw.signal(),
29 }
30 }
31
32 /// Convert this to a raw [`PipeOptions`](sys::PipeOptions) object.
33 pub fn into_raw(self) -> sys::PipeOptions {
34 sys::PipeOptions::new(
35 self.prevent_close,
36 self.prevent_cancel,
37 self.prevent_abort,
38 self.signal,
39 )
40 }
41
42 /// Sets whether the destination writable stream should be closed
43 /// when the source readable stream closes.
44 pub fn prevent_close(&mut self, prevent_close: bool) -> &mut Self {
45 self.prevent_close = prevent_close;
46 self
47 }
48
49 /// Sets whether the source readable stream should be [canceled](https://streams.spec.whatwg.org/#cancel-a-readable-stream)
50 /// when the destination writable stream errors.
51 pub fn prevent_cancel(&mut self, prevent_cancel: bool) -> &mut Self {
52 self.prevent_cancel = prevent_cancel;
53 self
54 }
55
56 /// Sets whether the destination writable stream should be [aborted](https://streams.spec.whatwg.org/#abort-a-writable-stream)
57 /// when the source readable stream errors.
58 pub fn prevent_abort(&mut self, prevent_abort: bool) -> &mut Self {
59 self.prevent_abort = prevent_abort;
60 self
61 }
62
63 /// Sets an abort signal to abort the ongoing pipe operation.
64 /// When the signal is aborted, the source readable stream will be canceled
65 /// and the destination writable stream will be aborted
66 /// unless the respective options [`prevent_cancel`](Self::prevent_cancel)
67 /// or [`prevent_abort`](Self::prevent_abort) are set.
68 pub fn signal(&mut self, signal: AbortSignal) -> &mut Self {
69 self.signal = Some(signal);
70 self
71 }
72}