// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IRemoteActionGroup {
  fn as_remote_action_group(Self) -> RemoteActionGroup
  fn activate_action_full(Self, String, &@glib.IVariant?, &@glib.IVariant) -> Unit = _
  fn change_action_state_full(Self, String, &@glib.IVariant, &@glib.IVariant) -> Unit = _
}

///|
pub impl IRemoteActionGroup for RemoteActionGroup with fn as_remote_action_group(
  self,
) {
  self
}

///|
/// Implementation contract for RemoteActionGroup.activate_action_full. Self is the retained MoonBit state; the second parameter is the invoked RemoteActionGroup object.
pub(open) trait VRemoteActionGroupActivateActionFull {
  fn activate_action_full(
    Self,
    RemoteActionGroup,
    String,
    &@glib.IVariant?,
    &@glib.IVariant,
  ) -> Unit
}

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

///|
#borrow(self_, action_name, parameter, platform_data)
extern "c" fn moonbit_g_remote_action_group_activate_action_full(
  self_ : RemoteActionGroup,
  action_name : Bytes,
  parameter : @glib.Nullable[@glib.Variant],
  platform_data : @glib.Variant,
) = "moonbit_g_remote_action_group_activate_action_full"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.RemoteActionGroup.activate_action_full.html).
pub fn RemoteActionGroup::activate_action_full(
  self : RemoteActionGroup,
  action_name : String,
  parameter : &@glib.IVariant?,
  platform_data : &@glib.IVariant,
) -> Unit {
  moonbit_g_remote_action_group_activate_action_full(
    self,
    @encoding/utf8.encode(action_name),
    match parameter {
      Some(v) => @glib.Nullable::some(v.as_variant())
      None => @glib.Nullable::null()
    },
    platform_data.as_variant(),
  )
}

///|
#borrow(self_, action_name, value, platform_data)
extern "c" fn moonbit_g_remote_action_group_change_action_state_full(
  self_ : RemoteActionGroup,
  action_name : Bytes,
  value : @glib.Variant,
  platform_data : @glib.Variant,
) = "moonbit_g_remote_action_group_change_action_state_full"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.RemoteActionGroup.change_action_state_full.html).
pub fn RemoteActionGroup::change_action_state_full(
  self : RemoteActionGroup,
  action_name : String,
  value : &@glib.IVariant,
  platform_data : &@glib.IVariant,
) -> Unit {
  moonbit_g_remote_action_group_change_action_state_full(
    self,
    @encoding/utf8.encode(action_name),
    value.as_variant(),
    platform_data.as_variant(),
  )
}

///|
impl IRemoteActionGroup with fn activate_action_full(
  self,
  action_name,
  parameter,
  platform_data,
) -> Unit {
  self
  .as_remote_action_group()
  .activate_action_full(action_name, parameter, platform_data)
}

///|
impl IRemoteActionGroup with fn change_action_state_full(
  self,
  action_name,
  value,
  platform_data,
) -> Unit {
  self
  .as_remote_action_group()
  .change_action_state_full(action_name, value, platform_data)
}

///|
pub fn RemoteActionGroup::as_action_group(
  self : RemoteActionGroup,
) -> ActionGroup = "%identity"

///|
pub impl IActionGroup for RemoteActionGroup with fn as_action_group(self) {
  self.as_action_group()
}