// GENERATED — DO NOT EDIT

///|
/// [Upstream documentation](https://docs.gtk.org/gobject/class.Object.html).
pub type Object

///|
pub(open) trait IObject {
  fn as_object(Self) -> Object
  fn force_floating(Self) -> Unit = _
  fn freeze_notify(Self) -> Unit = _
  fn is_floating(Self) -> Bool = _
  fn notify(Self, String) -> Unit = _
  fn ref_(Self) -> Object = _
  fn ref_sink(Self) -> Object = _
  fn run_dispose(Self) -> Unit = _
  fn thaw_notify(Self) -> Unit = _
  fn unref(Self) -> Unit = _
}

///|
pub impl IObject for Object with fn as_object(self) {
  self
}

///|
/// Implementation contract for Object.constructed. Self is the retained MoonBit state; the second parameter is the invoked Object object.
pub(open) trait VObjectConstructed {
  fn constructed(Self, Object) -> Unit
}

///|
/// Implementation contract for Object.dispose. Self is the retained MoonBit state; the second parameter is the invoked Object object.
pub(open) trait VObjectDispose {
  fn dispose(Self, Object) -> Unit
}

///|
/// Implementation contract for Object.finalize. Self is the retained MoonBit state; the second parameter is the invoked Object object.
pub(open) trait VObjectFinalize {
  fn finalize(Self, Object) -> Unit
}

///|
/// [Upstream documentation](https://docs.gtk.org/gobject/method.Object.force_floating.html).
#borrow(self)
pub extern "c" fn Object::force_floating(self : Object) = "moonbit_g_object_force_floating"

///|
/// [Upstream documentation](https://docs.gtk.org/gobject/method.Object.freeze_notify.html).
#borrow(self)
pub extern "c" fn Object::freeze_notify(self : Object) = "moonbit_g_object_freeze_notify"

///|
/// [Upstream documentation](https://docs.gtk.org/gobject/method.Object.is_floating.html).
#borrow(self)
pub extern "c" fn Object::is_floating(self : Object) -> Bool = "moonbit_g_object_is_floating"

///|
#borrow(self_, property_name)
extern "c" fn moonbit_g_object_notify(self_ : Object, property_name : Bytes) = "moonbit_g_object_notify"

///|
/// [Upstream documentation](https://docs.gtk.org/gobject/method.Object.notify.html).
pub fn Object::notify(self : Object, property_name : String) -> Unit {
  moonbit_g_object_notify(self, @encoding/utf8.encode(property_name))
}

///|
/// [Upstream documentation](https://docs.gtk.org/gobject/method.Object.ref.html).
#borrow(self)
pub extern "c" fn Object::ref_(self : Object) -> Object = "moonbit_g_object_ref"

///|
/// [Upstream documentation](https://docs.gtk.org/gobject/method.Object.ref_sink.html).
#borrow(self)
pub extern "c" fn Object::ref_sink(self : Object) -> Object = "moonbit_g_object_ref_sink"

///|
/// [Upstream documentation](https://docs.gtk.org/gobject/method.Object.run_dispose.html).
#borrow(self)
pub extern "c" fn Object::run_dispose(self : Object) = "moonbit_g_object_run_dispose"

///|
/// [Upstream documentation](https://docs.gtk.org/gobject/method.Object.thaw_notify.html).
#borrow(self)
pub extern "c" fn Object::thaw_notify(self : Object) = "moonbit_g_object_thaw_notify"

///|
/// [Upstream documentation](https://docs.gtk.org/gobject/method.Object.unref.html).
#borrow(self)
pub extern "c" fn Object::unref(self : Object) = "moonbit_g_object_unref"

///|
/// Creates a new Object with default property values.
pub extern "c" fn Object::new() -> Object = "moonbit_g_object_new"

///|
impl IObject with fn force_floating(self) -> Unit {
  self.as_object().force_floating()
}

///|
impl IObject with fn freeze_notify(self) -> Unit {
  self.as_object().freeze_notify()
}

///|
impl IObject with fn is_floating(self) -> Bool {
  self.as_object().is_floating()
}

///|
impl IObject with fn notify(self, property_name) -> Unit {
  self.as_object().notify(property_name)
}

///|
impl IObject with fn ref_(self) -> Object {
  self.as_object().ref_()
}

///|
impl IObject with fn ref_sink(self) -> Object {
  self.as_object().ref_sink()
}

///|
impl IObject with fn run_dispose(self) -> Unit {
  self.as_object().run_dispose()
}

///|
impl IObject with fn thaw_notify(self) -> Unit {
  self.as_object().thaw_notify()
}

///|
impl IObject with fn unref(self) -> Unit {
  self.as_object().unref()
}