// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IDBusObjectSkeleton {
  fn as_dbus_object_skeleton(Self) -> DBusObjectSkeleton
  fn add_interface(Self, &IDBusInterfaceSkeleton) -> Unit = _
  fn flush(Self) -> Unit = _
  fn remove_interface(Self, &IDBusInterfaceSkeleton) -> Unit = _
  fn remove_interface_by_name(Self, String) -> Unit = _
  fn set_object_path(Self, String) -> Unit = _
  fn connect_authorize_method(
    Self,
    (DBusObjectSkeleton, DBusInterfaceSkeleton, DBusMethodInvocation) -> Bool,
  ) -> UInt64 = _
}

///|
pub impl IDBusObjectSkeleton for DBusObjectSkeleton with fn as_dbus_object_skeleton(
  self,
) {
  self
}

///|
#borrow(object_path)
extern "c" fn moonbit_g_dbus_object_skeleton_new(
  object_path : Bytes,
) -> DBusObjectSkeleton = "moonbit_g_dbus_object_skeleton_new"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/ctor.DBusObjectSkeleton.new.html).
pub fn DBusObjectSkeleton::new(object_path : String) -> DBusObjectSkeleton {
  moonbit_g_dbus_object_skeleton_new(@encoding/utf8.encode(object_path))
}

///|
#borrow(self_, interface_)
extern "c" fn moonbit_g_dbus_object_skeleton_add_interface(
  self_ : DBusObjectSkeleton,
  interface_ : DBusInterfaceSkeleton,
) = "moonbit_g_dbus_object_skeleton_add_interface"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DBusObjectSkeleton.add_interface.html).
pub fn DBusObjectSkeleton::add_interface(
  self : DBusObjectSkeleton,
  interface_ : &IDBusInterfaceSkeleton,
) -> Unit {
  moonbit_g_dbus_object_skeleton_add_interface(
    self,
    interface_.as_dbus_interface_skeleton(),
  )
}

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DBusObjectSkeleton.flush.html).
#borrow(self)
pub extern "c" fn DBusObjectSkeleton::flush(self : DBusObjectSkeleton) = "moonbit_g_dbus_object_skeleton_flush"

///|
#borrow(self_, interface_)
extern "c" fn moonbit_g_dbus_object_skeleton_remove_interface(
  self_ : DBusObjectSkeleton,
  interface_ : DBusInterfaceSkeleton,
) = "moonbit_g_dbus_object_skeleton_remove_interface"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DBusObjectSkeleton.remove_interface.html).
pub fn DBusObjectSkeleton::remove_interface(
  self : DBusObjectSkeleton,
  interface_ : &IDBusInterfaceSkeleton,
) -> Unit {
  moonbit_g_dbus_object_skeleton_remove_interface(
    self,
    interface_.as_dbus_interface_skeleton(),
  )
}

///|
#borrow(self_, interface_name)
extern "c" fn moonbit_g_dbus_object_skeleton_remove_interface_by_name(
  self_ : DBusObjectSkeleton,
  interface_name : Bytes,
) = "moonbit_g_dbus_object_skeleton_remove_interface_by_name"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DBusObjectSkeleton.remove_interface_by_name.html).
pub fn DBusObjectSkeleton::remove_interface_by_name(
  self : DBusObjectSkeleton,
  interface_name : String,
) -> Unit {
  moonbit_g_dbus_object_skeleton_remove_interface_by_name(
    self,
    @encoding/utf8.encode(interface_name),
  )
}

///|
#borrow(self_, object_path)
extern "c" fn moonbit_g_dbus_object_skeleton_set_object_path(
  self_ : DBusObjectSkeleton,
  object_path : Bytes,
) = "moonbit_g_dbus_object_skeleton_set_object_path"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DBusObjectSkeleton.set_object_path.html).
pub fn DBusObjectSkeleton::set_object_path(
  self : DBusObjectSkeleton,
  object_path : String,
) -> Unit {
  moonbit_g_dbus_object_skeleton_set_object_path(
    self,
    @encoding/utf8.encode(object_path),
  )
}

///|
#borrow(instance)
extern "c" fn gd_bus_object_skeleton_connect_authorize_method(
  instance : DBusObjectSkeleton,
  function : FuncRef[
    (
      DBusObjectSkeleton,
      DBusInterfaceSkeleton,
      DBusMethodInvocation,
      (DBusObjectSkeleton, DBusInterfaceSkeleton, DBusMethodInvocation) -> Bool,
    ) -> Bool,
  ],
  closure : (DBusObjectSkeleton, DBusInterfaceSkeleton, DBusMethodInvocation) -> Bool,
) -> UInt64 = "moonbit_gd_bus_object_skeleton_connect_authorize_method"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/signal.DBusObjectSkeleton.authorize-method.html).
pub fn DBusObjectSkeleton::connect_authorize_method(
  self : DBusObjectSkeleton,
  f : (DBusObjectSkeleton, DBusInterfaceSkeleton, DBusMethodInvocation) -> Bool,
) -> UInt64 {
  gd_bus_object_skeleton_connect_authorize_method(
    self,
    fn(instance_, interface, invocation, f) {
      f(instance_, interface, invocation)
    },
    f,
  )
}

///|
#borrow(self_)
extern "c" fn moonbit_gd_bus_object_skeleton_get_g_object_path(
  self_ : DBusObjectSkeleton,
) -> Bytes = "moonbit_gd_bus_object_skeleton_get_g_object_path"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/property.DBusObjectSkeleton.g-object-path.html).
pub fn DBusObjectSkeleton::get_g_object_path(
  self : DBusObjectSkeleton,
) -> String {
  @encoding/utf8.decode_lossy(
    moonbit_gd_bus_object_skeleton_get_g_object_path(self),
  )
}

///|
#borrow(self_, value)
extern "c" fn moonbit_gd_bus_object_skeleton_set_g_object_path(
  self_ : DBusObjectSkeleton,
  value : Bytes,
) = "moonbit_gd_bus_object_skeleton_set_g_object_path"

///|
pub fn DBusObjectSkeleton::set_g_object_path(
  self : DBusObjectSkeleton,
  value : String,
) -> Unit {
  moonbit_gd_bus_object_skeleton_set_g_object_path(
    self,
    @encoding/utf8.encode(value),
  )
}

///|
impl IDBusObjectSkeleton with fn add_interface(self, interface_) -> Unit {
  self.as_dbus_object_skeleton().add_interface(interface_)
}

///|
impl IDBusObjectSkeleton with fn flush(self) -> Unit {
  self.as_dbus_object_skeleton().flush()
}

///|
impl IDBusObjectSkeleton with fn remove_interface(self, interface_) -> Unit {
  self.as_dbus_object_skeleton().remove_interface(interface_)
}

///|
impl IDBusObjectSkeleton with fn remove_interface_by_name(self, interface_name) -> Unit {
  self.as_dbus_object_skeleton().remove_interface_by_name(interface_name)
}

///|
impl IDBusObjectSkeleton with fn set_object_path(self, object_path) -> Unit {
  self.as_dbus_object_skeleton().set_object_path(object_path)
}

///|
impl IDBusObjectSkeleton with fn connect_authorize_method(self, f) -> UInt64 {
  self.as_dbus_object_skeleton().connect_authorize_method(f)
}

///|
pub fn DBusObjectSkeleton::as_gobject_object(
  self : DBusObjectSkeleton,
) -> @gobject.Object = "%identity"

///|
pub impl @gobject.IObject for DBusObjectSkeleton with fn as_object(self) {
  self.as_gobject_object()
}

///|
pub fn DBusObjectSkeleton::as_dbus_object(
  self : DBusObjectSkeleton,
) -> DBusObject = "%identity"

///|
pub impl IDBusObject for DBusObjectSkeleton with fn as_dbus_object(self) {
  self.as_dbus_object()
}