// Do not edit. This file is generated.
// MoonBit type: ResponseInit
// Specifications: fetch.idl

///|
/// [ResponseInit](https://developer.mozilla.org/en-US/docs/Web/API/ResponseInit)
#external
pub type ResponseInit

///|
pub impl TJsValue for ResponseInit with to_js(self : ResponseInit) -> JsValue = "%identity"

///|
pub impl FromJsAny for ResponseInit with from_js_any(value : JsAny) -> ResponseInit = "%identity"

///|
pub fn ResponseInit::new(
  status? : UInt,
  status_text? : String,
  headers? : &THeadersInit,
) -> ResponseInit {
  response_init_ffi(
    opt_to_js(status),
    opt_to_js(status_text),
    match headers {
      Some(v) => v.to_js()
      None => JsValue::undefined()
    },
  )
}

///|
pub fn ResponseInit::empty() -> ResponseInit {
  response_init_empty_ffi()
}

///|
pub fn ResponseInit::status(self : ResponseInit) -> UInt? {
  response_init_get_status_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
pub fn ResponseInit::status_text(self : ResponseInit) -> String? {
  response_init_get_status_text_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
pub fn ResponseInit::headers(self : ResponseInit) -> HeadersInit? {
  response_init_get_headers_ffi(TJsValue::to_js(self)).to_option()
}

///|
#cfg(target="js")
extern "js" fn response_init_ffi(
  status : JsValue,
  status_text : JsValue,
  headers : JsValue,
) -> ResponseInit =
  #|(status, statusText, headers) => {
  #|  const obj = {};
  #|  if (status !== undefined) obj.status = status;
  #|  if (statusText !== undefined) obj.statusText = statusText;
  #|  if (headers !== undefined) obj.headers = headers;
  #|  return obj;
  #|}

///|
#cfg(target="js")
extern "js" fn response_init_empty_ffi() -> ResponseInit = "() => {}"

///|
#cfg(target="js")
extern "js" fn response_init_get_status_ffi(obj : JsValue) -> JsValue = "(obj) => obj.status"

///|
#cfg(target="js")
extern "js" fn response_init_get_status_text_ffi(obj : JsValue) -> JsValue = "(obj) => obj.statusText"

///|
#cfg(target="js")
extern "js" fn response_init_get_headers_ffi(obj : JsValue) -> JsValue = "(obj) => obj.headers"

///|
#cfg(target="wasm-gc")
fn response_init_ffi(
  status : JsValue,
  status_text : JsValue,
  headers : JsValue,
) -> ResponseInit = "webapi_ResponseInit" "new"

///|
#cfg(target="wasm-gc")
fn response_init_empty_ffi() -> ResponseInit = "webapi_Dictionary" "empty"

///|
#cfg(target="wasm-gc")
fn response_init_get_status_ffi(obj : JsValue) -> JsValue = "webapi_ResponseInit" "get_status"

///|
#cfg(target="wasm-gc")
fn response_init_get_status_text_ffi(obj : JsValue) -> JsValue = "webapi_ResponseInit" "get_statusText"

///|
#cfg(target="wasm-gc")
fn response_init_get_headers_ffi(obj : JsValue) -> JsValue = "webapi_ResponseInit" "get_headers"