// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IDBusMenuModel {
  fn as_dbus_menu_model(Self) -> DBusMenuModel
}

///|
pub impl IDBusMenuModel for DBusMenuModel with fn as_dbus_menu_model(self) {
  self
}

///|
#borrow(connection, bus_name, object_path)
extern "c" fn moonbit_g_dbus_menu_model_get(
  connection : DBusConnection,
  bus_name : @glib.Nullable[Bytes],
  object_path : Bytes,
) -> DBusMenuModel = "moonbit_g_dbus_menu_model_get"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/type_func.DBusMenuModel.get.html).
pub fn DBusMenuModel::get(
  connection : &IDBusConnection,
  bus_name : String?,
  object_path : String,
) -> DBusMenuModel {
  moonbit_g_dbus_menu_model_get(
    connection.as_dbus_connection(),
    match bus_name {
      Some(s) => @glib.Nullable::some(@encoding/utf8.encode(s))
      None => @glib.Nullable::null()
    },
    @encoding/utf8.encode(object_path),
  )
}

///|
pub fn DBusMenuModel::as_menu_model(self : DBusMenuModel) -> MenuModel = "%identity"

///|
pub impl IMenuModel for DBusMenuModel with fn as_menu_model(self) {
  self.as_menu_model()
}

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

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