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}