// Generated from WebIDL - DO NOT EDIT
// Source: @webref/idl/requestidlecallback

///|
/// IdleRequestCallback callback interface
pub type IdleRequestCallback

///|
/// Create IdleRequestCallback from a MoonBit function
pub extern "js" fn IdleRequestCallback::from_fn(
  handler : (IdleDeadline) -> Unit,
) -> IdleRequestCallback =
  #| (handler) => (a0) => handler(a0)

///|
/// IdleRequestOptions dictionary
pub(all) struct IdleRequestOptions {
  timeout : Int?
}

///|
/// Create a new IdleRequestOptions with default values
pub fn IdleRequestOptions::default() -> IdleRequestOptions {
  IdleRequestOptions::{ timeout: None }
}

///|
extern "js" fn IdleRequestOptions::to_js_ffi(
  self : IdleRequestOptions,
) -> JsValue =
  #| (self) => ({
  #|   timeout: self.timeout
  #| })

///|
/// Convert to JsValue
pub fn IdleRequestOptions::to_js(self : IdleRequestOptions) -> JsValue {
  IdleRequestOptions::to_js_ffi(self)
}

///|
extern "js" fn IdleRequestOptions::from_js_ffi(
  value : JsValue,
) -> IdleRequestOptions =
  #| (v) => ({
  #|   timeout: v.timeout
  #| })

///|
/// Convert from JsValue
pub fn IdleRequestOptions::from_js(value : JsValue) -> IdleRequestOptions {
  IdleRequestOptions::from_js_ffi(value)
}

///|
/// IdleDeadline interface
pub type IdleDeadline

///|
pub extern "js" fn IdleDeadline::to_js_value(self : IdleDeadline) -> JsValue =
  #| (self) => self

///|
/// Cast JsValue to IdleDeadline (unchecked)
pub extern "js" fn IdleDeadline::from_js_value(v : JsValue) -> IdleDeadline =
  #| (v) => v

///|
/// Safely cast JsValue to IdleDeadline (checked with instanceof)
pub extern "js" fn IdleDeadline::from_js_value_opt(
  v : JsValue,
) -> IdleDeadline? =
  #| (v) => (v instanceof IdleDeadline) ? { $tag: 1, _0: v } : { $tag: 0 }

///|
/// Safely cast JsValue to IdleDeadline (checked with instanceof)
pub extern "js" fn JsValue::as_idle_deadline(self : JsValue) -> IdleDeadline? =
  #| (self) => (self instanceof IdleDeadline) ? { $tag: 1, _0: self } : { $tag: 0 }

///|
/// Cast JsValue to IdleDeadline (unchecked)
pub extern "js" fn JsValue::to_idle_deadline(self : JsValue) -> IdleDeadline =
  #| (self) => self

///|
pub extern "js" fn IdleDeadline::time_remaining(
  self : IdleDeadline,
) -> DOMHighResTimeStamp =
  #| (self) => self.timeRemaining()

///|
pub extern "js" fn IdleDeadline::get_did_timeout(self : IdleDeadline) -> Bool =
  #| (self) => self.didTimeout