// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IPropertyAction {
  fn as_property_action(Self) -> PropertyAction
}

///|
pub impl IPropertyAction for PropertyAction with fn as_property_action(self) {
  self
}

///|
#borrow(name, object, property_name)
extern "c" fn moonbit_g_property_action_new(
  name : Bytes,
  object : @gobject.Object,
  property_name : Bytes,
) -> PropertyAction = "moonbit_g_property_action_new"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/ctor.PropertyAction.new.html).
pub fn PropertyAction::new(
  name : String,
  object : &@gobject.IObject,
  property_name : String,
) -> PropertyAction {
  moonbit_g_property_action_new(
    @encoding/utf8.encode(name),
    object.as_object(),
    @encoding/utf8.encode(property_name),
  )
}

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

///|
/// [Upstream documentation](https://docs.gtk.org/gio/property.PropertyAction.enabled.html).
pub fn PropertyAction::get_enabled(self : PropertyAction) -> Bool {
  moonbit_g_property_action_get_enabled(self) != 0
}

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

///|
/// [Upstream documentation](https://docs.gtk.org/gio/property.PropertyAction.invert-boolean.html).
pub fn PropertyAction::get_invert_boolean(self : PropertyAction) -> Bool {
  moonbit_g_property_action_get_invert_boolean(self) != 0
}

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

///|
/// [Upstream documentation](https://docs.gtk.org/gio/property.PropertyAction.name.html).
pub fn PropertyAction::get_name(self : PropertyAction) -> String {
  @encoding/utf8.decode_lossy(moonbit_g_property_action_get_name(self))
}

///|
#borrow(self_)
extern "c" fn moonbit_g_property_action_get_state(
  self_ : PropertyAction,
) -> @glib.Nullable[@glib.Variant] = "moonbit_g_property_action_get_state"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/property.PropertyAction.state.html).
pub fn PropertyAction::get_state(self : PropertyAction) -> @glib.Variant? {
  moonbit_g_property_action_get_state(self).to_option()
}

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

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

///|
pub fn PropertyAction::as_action(self : PropertyAction) -> Action = "%identity"

///|
pub impl IAction for PropertyAction with fn as_action(self) {
  self.as_action()
}