// Do not edit. This file is generated.
// MoonBit type: PerformanceObserverInit
// Specifications: performance-timeline.idl

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

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

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

///|
pub fn PerformanceObserverInit::new(
  entry_types? : Array[String],
  type_? : String,
  buffered? : Bool,
) -> PerformanceObserverInit {
  performance_observer_init_ffi(
    opt_to_js(entry_types),
    opt_to_js(type_),
    opt_to_js(buffered),
  )
}

///|
pub fn PerformanceObserverInit::empty() -> PerformanceObserverInit {
  performance_observer_init_empty_ffi()
}

///|
pub fn PerformanceObserverInit::entry_types(
  self : PerformanceObserverInit,
) -> Array[String]? {
  performance_observer_init_get_entry_types_ffi(TJsValue::to_js(self)).to_option()
}

///|
pub fn PerformanceObserverInit::type_(
  self : PerformanceObserverInit,
) -> String? {
  performance_observer_init_get_type_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
pub fn PerformanceObserverInit::buffered(
  self : PerformanceObserverInit,
) -> Bool? {
  performance_observer_init_get_buffered_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
#cfg(target="js")
extern "js" fn performance_observer_init_ffi(
  entry_types : JsValue,
  type_ : JsValue,
  buffered : JsValue,
) -> PerformanceObserverInit =
  #|(entryTypes, type, buffered) => {
  #|  const obj = {};
  #|  if (entryTypes !== undefined) obj.entryTypes = entryTypes;
  #|  if (type !== undefined) obj.type = type;
  #|  if (buffered !== undefined) obj.buffered = buffered;
  #|  return obj;
  #|}

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

///|
#cfg(target="js")
extern "js" fn performance_observer_init_get_entry_types_ffi(
  obj : JsValue,
) -> JsValue = "(obj) => obj.entryTypes"

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

///|
#cfg(target="js")
extern "js" fn performance_observer_init_get_buffered_ffi(
  obj : JsValue,
) -> JsValue = "(obj) => obj.buffered"

///|
#cfg(target="wasm-gc")
fn performance_observer_init_ffi(
  entry_types : JsValue,
  type_ : JsValue,
  buffered : JsValue,
) -> PerformanceObserverInit = "webapi_PerformanceObserverInit" "new"

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

///|
#cfg(target="wasm-gc")
fn performance_observer_init_get_entry_types_ffi(obj : JsValue) -> JsValue = "webapi_PerformanceObserverInit" "get_entryTypes"

///|
#cfg(target="wasm-gc")
fn performance_observer_init_get_type_ffi(obj : JsValue) -> JsValue = "webapi_PerformanceObserverInit" "get_type"

///|
#cfg(target="wasm-gc")
fn performance_observer_init_get_buffered_ffi(obj : JsValue) -> JsValue = "webapi_PerformanceObserverInit" "get_buffered"