// GENERATED — DO NOT EDIT

///|
/// [Upstream documentation](https://docs.gtk.org/gio/iface.Initable.html).
pub type Initable

///|
pub(open) trait IInitable {
  fn as_initable(Self) -> Initable
  fn init(Self, &ICancellable?) -> Bool raise @glib.Error_ = _
}

///|
pub impl IInitable for Initable with fn as_initable(self) {
  self
}

///|
#borrow(self_, cancellable, error)
extern "c" fn moonbit_g_initable_init(
  self_ : Initable,
  cancellable : @glib.Nullable[Cancellable],
  error : Ref[@glib.Nullable[@glib.Error_]],
) -> Bool = "moonbit_g_initable_init"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.Initable.init.html).
pub fn Initable::init(
  self : Initable,
  cancellable : &ICancellable?,
) -> Bool raise @glib.Error_ {
  let error_ : Ref[@glib.Nullable[@glib.Error_]] = Ref(@glib.Nullable::null())
  let result = moonbit_g_initable_init(
    self,
    match cancellable {
      Some(v) => @glib.Nullable::some(v.as_cancellable())
      None => @glib.Nullable::null()
    },
    error_,
  )
  match error_.val.to_option() {
    Some(e) => raise e
    None => ()
  }
  result
}

///|
impl IInitable with fn init(self, cancellable) -> Bool raise @glib.Error_ {
  self.as_initable().init(cancellable)
}