///|
type Idle Bytes

///|
pub impl ToHandle for Idle with to_handle(idle : Idle) -> Handle = "%identity"

///|
pub impl ToHandle for Idle with of_handle(handle : Handle) -> Idle = "%identity"

///|
extern "c" fn uv_idle_make() -> Idle = "moonbit_uv_idle_make"

///|
extern "c" fn uv_idle_init(loop_ : Loop, idle : Idle) -> Int = "moonbit_uv_idle_init"

///|
pub fn Idle::new(self : Loop) -> Idle!Errno {
  let idle = uv_idle_make()
  let status = uv_idle_init(self, idle)
  if status < 0 {
    raise Errno::of_int(status)
  }
  return idle
}

///|
extern "c" fn uv_idle_start(idle : Idle, cb : (Idle) -> Unit) -> Int = "moonbit_uv_idle_start"

///|
extern "c" fn uv_idle_stop(idle : Idle) -> Int = "moonbit_uv_idle_stop"

///|
pub fn Idle::start(self : Idle, cb : (Idle) -> Unit) -> Unit!Errno {
  let status = uv_idle_start(self, fn(idle) { cb(idle) })
  if status < 0 {
    raise Errno::of_int(status)
  }
}

///|
pub fn Idle::stop(self : Idle) -> Unit!Errno {
  let status = uv_idle_stop(self)
  if status < 0 {
    raise Errno::of_int(status)
  }
}