// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IDBusObjectProxy {
  fn as_dbus_object_proxy(Self) -> DBusObjectProxy
  fn get_connection(Self) -> DBusConnection = _
}

///|
pub impl IDBusObjectProxy for DBusObjectProxy with fn as_dbus_object_proxy(self) {
  self
}

///|
#borrow(connection, object_path)
extern "c" fn moonbit_g_dbus_object_proxy_new(
  connection : DBusConnection,
  object_path : Bytes,
) -> DBusObjectProxy = "moonbit_g_dbus_object_proxy_new"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/ctor.DBusObjectProxy.new.html).
pub fn DBusObjectProxy::new(
  connection : &IDBusConnection,
  object_path : String,
) -> DBusObjectProxy {
  moonbit_g_dbus_object_proxy_new(
    connection.as_dbus_connection(),
    @encoding/utf8.encode(object_path),
  )
}

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DBusObjectProxy.get_connection.html).
#borrow(self)
pub extern "c" fn DBusObjectProxy::get_connection(
  self : DBusObjectProxy,
) -> DBusConnection = "moonbit_g_dbus_object_proxy_get_connection"

///|
#borrow(self_)
extern "c" fn moonbit_gd_bus_object_proxy_get_g_connection(
  self_ : DBusObjectProxy,
) -> @glib.Nullable[DBusConnection] = "moonbit_gd_bus_object_proxy_get_g_connection"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/property.DBusObjectProxy.g-connection.html).
pub fn DBusObjectProxy::get_g_connection(
  self : DBusObjectProxy,
) -> DBusConnection? {
  moonbit_gd_bus_object_proxy_get_g_connection(self).to_option()
}

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

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

///|
impl IDBusObjectProxy with fn get_connection(self) -> DBusConnection {
  self.as_dbus_object_proxy().get_connection()
}

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

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

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

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