// Do not edit. This file is generated.
// MoonBit type: UnderlyingSink
// Specifications: streams.idl
///|
/// [UnderlyingSink](https://developer.mozilla.org/en-US/docs/Web/API/UnderlyingSink)
#external
pub type UnderlyingSink
///|
pub impl TJsValue for UnderlyingSink with to_js(self : UnderlyingSink) -> JsValue = "%identity"
///|
pub impl FromJsAny for UnderlyingSink with from_js_any(value : JsAny) -> UnderlyingSink = "%identity"
///|
pub fn UnderlyingSink::new(
start? : (WritableStreamDefaultController) -> JsValue,
write? : (JsValue, WritableStreamDefaultController) -> JsPromise[JsValue],
close? : () -> JsPromise[JsValue],
abort? : (JsValue) -> JsPromise[JsValue],
type_? : JsValue,
) -> UnderlyingSink {
underlying_sink_ffi(
match start {
Some(v) => TJsValue::to_js(underlying_sink_start_callback_ffi(v))
None => JsValue::undefined()
},
match write {
Some(v) => TJsValue::to_js(underlying_sink_write_callback_ffi(v))
None => JsValue::undefined()
},
match close {
Some(v) => TJsValue::to_js(underlying_sink_close_callback_ffi(v))
None => JsValue::undefined()
},
match abort {
Some(v) => TJsValue::to_js(underlying_sink_abort_callback_ffi(v))
None => JsValue::undefined()
},
opt_to_js(type_),
)
}
///|
pub fn UnderlyingSink::empty() -> UnderlyingSink {
underlying_sink_empty_ffi()
}
///|
pub fn UnderlyingSink::start(
self : UnderlyingSink,
) -> UnderlyingSinkStartCallback? {
underlying_sink_get_start_ffi(TJsValue::to_js(self)).to_option()
}
///|
pub fn UnderlyingSink::write(
self : UnderlyingSink,
) -> UnderlyingSinkWriteCallback? {
underlying_sink_get_write_ffi(TJsValue::to_js(self)).to_option()
}
///|
pub fn UnderlyingSink::close(
self : UnderlyingSink,
) -> UnderlyingSinkCloseCallback? {
underlying_sink_get_close_ffi(TJsValue::to_js(self)).to_option()
}
///|
pub fn UnderlyingSink::abort(
self : UnderlyingSink,
) -> UnderlyingSinkAbortCallback? {
underlying_sink_get_abort_ffi(TJsValue::to_js(self)).to_option()
}
///|
pub fn UnderlyingSink::type_(self : UnderlyingSink) -> JsValue? {
underlying_sink_get_type_ffi(TJsValue::to_js(self)).to_option()
}
///|
#cfg(target="js")
extern "js" fn underlying_sink_ffi(
start : JsValue,
write : JsValue,
close : JsValue,
abort : JsValue,
type_ : JsValue,
) -> UnderlyingSink =
#|(start, write, close, abort, type) => {
#| const obj = {};
#| if (start !== undefined) obj.start = start;
#| if (write !== undefined) obj.write = write;
#| if (close !== undefined) obj.close = close;
#| if (abort !== undefined) obj.abort = abort;
#| if (type !== undefined) obj.type = type;
#| return obj;
#|}
///|
#cfg(target="js")
extern "js" fn underlying_sink_empty_ffi() -> UnderlyingSink = "() => {}"
///|
#cfg(target="js")
extern "js" fn underlying_sink_get_start_ffi(obj : JsValue) -> JsValue = "(obj) => obj.start"
///|
#cfg(target="js")
extern "js" fn underlying_sink_get_write_ffi(obj : JsValue) -> JsValue = "(obj) => obj.write"
///|
#cfg(target="js")
extern "js" fn underlying_sink_get_close_ffi(obj : JsValue) -> JsValue = "(obj) => obj.close"
///|
#cfg(target="js")
extern "js" fn underlying_sink_get_abort_ffi(obj : JsValue) -> JsValue = "(obj) => obj.abort"
///|
#cfg(target="js")
extern "js" fn underlying_sink_get_type_ffi(obj : JsValue) -> JsValue = "(obj) => obj.type"
///|
#cfg(target="wasm-gc")
fn underlying_sink_ffi(
start : JsValue,
write : JsValue,
close : JsValue,
abort : JsValue,
type_ : JsValue,
) -> UnderlyingSink = "webapi_UnderlyingSink" "new"
///|
#cfg(target="wasm-gc")
fn underlying_sink_empty_ffi() -> UnderlyingSink = "webapi_Dictionary" "empty"
///|
#cfg(target="wasm-gc")
fn underlying_sink_get_start_ffi(obj : JsValue) -> JsValue = "webapi_UnderlyingSink" "get_start"
///|
#cfg(target="wasm-gc")
fn underlying_sink_get_write_ffi(obj : JsValue) -> JsValue = "webapi_UnderlyingSink" "get_write"
///|
#cfg(target="wasm-gc")
fn underlying_sink_get_close_ffi(obj : JsValue) -> JsValue = "webapi_UnderlyingSink" "get_close"
///|
#cfg(target="wasm-gc")
fn underlying_sink_get_abort_ffi(obj : JsValue) -> JsValue = "webapi_UnderlyingSink" "get_abort"
///|
#cfg(target="wasm-gc")
fn underlying_sink_get_type_ffi(obj : JsValue) -> JsValue = "webapi_UnderlyingSink" "get_type"