// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IDBusObjectManagerClient {
  fn as_dbus_object_manager_client(Self) -> DBusObjectManagerClient
  fn get_connection(Self) -> DBusConnection = _
  fn get_flags(Self) -> DBusObjectManagerClientFlags = _
  fn get_name(Self) -> String = _
  fn get_name_owner(Self) -> String? = _
  fn connect_interface_proxy_signal(
    Self,
    (
      DBusObjectManagerClient,
      DBusObjectProxy,
      DBusProxy,
      String,
      String,
      @glib.Variant,
    ) -> Unit,
  ) -> UInt64 = _
}

///|
pub impl IDBusObjectManagerClient for DBusObjectManagerClient with fn as_dbus_object_manager_client(
  self,
) {
  self
}

///|
/// Implementation contract for DBusObjectManagerClient.interface_proxy_properties_changed. Self is the retained MoonBit state; the second parameter is the invoked DBusObjectManagerClient object.
pub(open) trait VDBusObjectManagerClientInterfaceProxyPropertiesChanged {
  fn interface_proxy_properties_changed(
    Self,
    DBusObjectManagerClient,
    &IDBusObjectProxy,
    &IDBusProxy,
    &@glib.IVariant,
    String,
  ) -> Unit
}

///|
/// Implementation contract for DBusObjectManagerClient.interface_proxy_signal. Self is the retained MoonBit state; the second parameter is the invoked DBusObjectManagerClient object.
pub(open) trait VDBusObjectManagerClientInterfaceProxySignal {
  fn interface_proxy_signal(
    Self,
    DBusObjectManagerClient,
    &IDBusObjectProxy,
    &IDBusProxy,
    String,
    String,
    &@glib.IVariant,
  ) -> Unit
}

///|
#borrow(res, error)
extern "c" fn moonbit_g_dbus_object_manager_client_new_finish(
  res : AsyncResult,
  error : Ref[@glib.Nullable[@glib.Error_]],
) -> DBusObjectManagerClient = "moonbit_g_dbus_object_manager_client_new_finish"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/ctor.DBusObjectManagerClient.new_finish.html).
pub fn DBusObjectManagerClient::new_finish(
  res : &IAsyncResult,
) -> DBusObjectManagerClient raise @glib.Error_ {
  let error_ : Ref[@glib.Nullable[@glib.Error_]] = Ref(@glib.Nullable::null())
  let result = moonbit_g_dbus_object_manager_client_new_finish(
    res.as_async_result(),
    error_,
  )
  match error_.val.to_option() {
    Some(e) => raise e
    None => result
  }
}

///|
#borrow(res, error)
extern "c" fn moonbit_g_dbus_object_manager_client_new_for_bus_finish(
  res : AsyncResult,
  error : Ref[@glib.Nullable[@glib.Error_]],
) -> DBusObjectManagerClient = "moonbit_g_dbus_object_manager_client_new_for_bus_finish"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/ctor.DBusObjectManagerClient.new_for_bus_finish.html).
pub fn DBusObjectManagerClient::new_for_bus_finish(
  res : &IAsyncResult,
) -> DBusObjectManagerClient raise @glib.Error_ {
  let error_ : Ref[@glib.Nullable[@glib.Error_]] = Ref(@glib.Nullable::null())
  let result = moonbit_g_dbus_object_manager_client_new_for_bus_finish(
    res.as_async_result(),
    error_,
  )
  match error_.val.to_option() {
    Some(e) => raise e
    None => result
  }
}

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

///|
#borrow(self_)
extern "c" fn moonbit_g_dbus_object_manager_client_get_flags(
  self_ : DBusObjectManagerClient,
) -> Int = "moonbit_g_dbus_object_manager_client_get_flags"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DBusObjectManagerClient.get_flags.html).
pub fn DBusObjectManagerClient::get_flags(
  self : DBusObjectManagerClient,
) -> DBusObjectManagerClientFlags {
  DBusObjectManagerClientFlags::from_int(
    moonbit_g_dbus_object_manager_client_get_flags(self),
  )
}

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

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DBusObjectManagerClient.get_name.html).
pub fn DBusObjectManagerClient::get_name(
  self : DBusObjectManagerClient,
) -> String {
  @encoding/utf8.decode_lossy(
    moonbit_g_dbus_object_manager_client_get_name(self),
  )
}

///|
#borrow(self_)
extern "c" fn moonbit_g_dbus_object_manager_client_get_name_owner(
  self_ : DBusObjectManagerClient,
) -> @glib.Nullable[Bytes] = "moonbit_g_dbus_object_manager_client_get_name_owner"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DBusObjectManagerClient.get_name_owner.html).
pub fn DBusObjectManagerClient::get_name_owner(
  self : DBusObjectManagerClient,
) -> String? {
  let result = moonbit_g_dbus_object_manager_client_get_name_owner(self)
  match result.to_option() {
    Some(bytes) => Some(@encoding/utf8.decode_lossy(bytes))
    None => None
  }
}

///|
#borrow(instance)
extern "c" fn gd_bus_object_manager_client_connect_interface_proxy_signal(
  instance : DBusObjectManagerClient,
  function : FuncRef[
    (
      DBusObjectManagerClient,
      DBusObjectProxy,
      DBusProxy,
      Bytes,
      Bytes,
      @glib.Variant,
      (
        DBusObjectManagerClient,
        DBusObjectProxy,
        DBusProxy,
        String,
        String,
        @glib.Variant,
      ) -> Unit,
    ) -> Unit,
  ],
  closure : (
    DBusObjectManagerClient,
    DBusObjectProxy,
    DBusProxy,
    String,
    String,
    @glib.Variant,
  ) -> Unit,
) -> UInt64 = "moonbit_gd_bus_object_manager_client_connect_interface_proxy_signal"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/signal.DBusObjectManagerClient.interface-proxy-signal.html).
pub fn DBusObjectManagerClient::connect_interface_proxy_signal(
  self : DBusObjectManagerClient,
  f : (
    DBusObjectManagerClient,
    DBusObjectProxy,
    DBusProxy,
    String,
    String,
    @glib.Variant,
  ) -> Unit,
) -> UInt64 {
  gd_bus_object_manager_client_connect_interface_proxy_signal(
    self,
    fn(
      instance_,
      object_proxy,
      interface_proxy,
      sender_name,
      signal_name,
      parameters,
      f,
    ) {
      f(
        instance_,
        object_proxy,
        interface_proxy,
        @encoding/utf8.decode_lossy(sender_name),
        @encoding/utf8.decode_lossy(signal_name),
        parameters,
      )
    },
    f,
  )
}

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

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

///|
impl IDBusObjectManagerClient with fn get_connection(self) -> DBusConnection {
  self.as_dbus_object_manager_client().get_connection()
}

///|
impl IDBusObjectManagerClient with fn get_flags(self) -> DBusObjectManagerClientFlags {
  self.as_dbus_object_manager_client().get_flags()
}

///|
impl IDBusObjectManagerClient with fn get_name(self) -> String {
  self.as_dbus_object_manager_client().get_name()
}

///|
impl IDBusObjectManagerClient with fn get_name_owner(self) -> String? {
  self.as_dbus_object_manager_client().get_name_owner()
}

///|
impl IDBusObjectManagerClient with fn connect_interface_proxy_signal(self, f) -> UInt64 {
  self.as_dbus_object_manager_client().connect_interface_proxy_signal(f)
}

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

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

///|
pub fn DBusObjectManagerClient::as_async_initable(
  self : DBusObjectManagerClient,
) -> AsyncInitable = "%identity"

///|
pub impl IAsyncInitable for DBusObjectManagerClient with fn as_async_initable(
  self,
) {
  self.as_async_initable()
}

///|
pub fn DBusObjectManagerClient::as_dbus_object_manager(
  self : DBusObjectManagerClient,
) -> DBusObjectManager = "%identity"

///|
pub impl IDBusObjectManager for DBusObjectManagerClient with fn as_dbus_object_manager(
  self,
) {
  self.as_dbus_object_manager()
}

///|
pub fn DBusObjectManagerClient::as_initable(
  self : DBusObjectManagerClient,
) -> Initable = "%identity"

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