// GENERATED — DO NOT EDIT

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/struct.Attribute.html).
pub type Attribute

///|
pub(open) trait IAttribute {
  fn as_attribute(Self) -> Attribute
  fn as_color(Self) -> AttrColor? = _
  fn as_float(Self) -> AttrFloat? = _
  fn as_font_desc(Self) -> AttrFontDesc? = _
  fn as_font_features(Self) -> AttrFontFeatures? = _
  fn as_int(Self) -> AttrInt? = _
  fn as_language(Self) -> AttrLanguage? = _
  fn as_shape(Self) -> AttrShape? = _
  fn as_size(Self) -> AttrSize? = _
  fn as_string(Self) -> AttrString? = _
  fn equal(Self, Attribute) -> Bool = _
}

///|
pub impl IAttribute for Attribute with fn as_attribute(self) {
  self
}

///|
#borrow(self_)
extern "c" fn moonbit_pango_attribute_as_color(
  self_ : Attribute,
) -> @glib.Nullable[AttrColor] = "moonbit_pango_attribute_as_color"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/method.Attribute.as_color.html).
pub fn Attribute::as_color(self : Attribute) -> AttrColor? {
  let raw_result = moonbit_pango_attribute_as_color(self)
  raw_result.to_option()
}

///|
#borrow(self_)
extern "c" fn moonbit_pango_attribute_as_float(
  self_ : Attribute,
) -> @glib.Nullable[AttrFloat] = "moonbit_pango_attribute_as_float"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/method.Attribute.as_float.html).
pub fn Attribute::as_float(self : Attribute) -> AttrFloat? {
  let raw_result = moonbit_pango_attribute_as_float(self)
  raw_result.to_option()
}

///|
#borrow(self_)
extern "c" fn moonbit_pango_attribute_as_font_desc(
  self_ : Attribute,
) -> @glib.Nullable[AttrFontDesc] = "moonbit_pango_attribute_as_font_desc"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/method.Attribute.as_font_desc.html).
pub fn Attribute::as_font_desc(self : Attribute) -> AttrFontDesc? {
  let raw_result = moonbit_pango_attribute_as_font_desc(self)
  raw_result.to_option()
}

///|
#borrow(self_)
extern "c" fn moonbit_pango_attribute_as_font_features(
  self_ : Attribute,
) -> @glib.Nullable[AttrFontFeatures] = "moonbit_pango_attribute_as_font_features"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/method.Attribute.as_font_features.html).
pub fn Attribute::as_font_features(self : Attribute) -> AttrFontFeatures? {
  let raw_result = moonbit_pango_attribute_as_font_features(self)
  raw_result.to_option()
}

///|
#borrow(self_)
extern "c" fn moonbit_pango_attribute_as_int(
  self_ : Attribute,
) -> @glib.Nullable[AttrInt] = "moonbit_pango_attribute_as_int"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/method.Attribute.as_int.html).
pub fn Attribute::as_int(self : Attribute) -> AttrInt? {
  let raw_result = moonbit_pango_attribute_as_int(self)
  raw_result.to_option()
}

///|
#borrow(self_)
extern "c" fn moonbit_pango_attribute_as_language(
  self_ : Attribute,
) -> @glib.Nullable[AttrLanguage] = "moonbit_pango_attribute_as_language"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/method.Attribute.as_language.html).
pub fn Attribute::as_language(self : Attribute) -> AttrLanguage? {
  let raw_result = moonbit_pango_attribute_as_language(self)
  raw_result.to_option()
}

///|
#borrow(self_)
extern "c" fn moonbit_pango_attribute_as_shape(
  self_ : Attribute,
) -> @glib.Nullable[AttrShape] = "moonbit_pango_attribute_as_shape"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/method.Attribute.as_shape.html).
pub fn Attribute::as_shape(self : Attribute) -> AttrShape? {
  let raw_result = moonbit_pango_attribute_as_shape(self)
  raw_result.to_option()
}

///|
#borrow(self_)
extern "c" fn moonbit_pango_attribute_as_size(
  self_ : Attribute,
) -> @glib.Nullable[AttrSize] = "moonbit_pango_attribute_as_size"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/method.Attribute.as_size.html).
pub fn Attribute::as_size(self : Attribute) -> AttrSize? {
  let raw_result = moonbit_pango_attribute_as_size(self)
  raw_result.to_option()
}

///|
#borrow(self_)
extern "c" fn moonbit_pango_attribute_as_string(
  self_ : Attribute,
) -> @glib.Nullable[AttrString] = "moonbit_pango_attribute_as_string"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/method.Attribute.as_string.html).
pub fn Attribute::as_string(self : Attribute) -> AttrString? {
  let raw_result = moonbit_pango_attribute_as_string(self)
  raw_result.to_option()
}

///|
#borrow(self_, attr2)
extern "c" fn moonbit_pango_attribute_equal(
  self_ : Attribute,
  attr2 : Attribute,
) -> Bool = "moonbit_pango_attribute_equal"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/method.Attribute.equal.html).
pub fn Attribute::equal(self : Attribute, attr2 : Attribute) -> Bool {
  moonbit_pango_attribute_equal(self, attr2)
}

///|
impl IAttribute with fn as_color(self) -> AttrColor? {
  self.as_attribute().as_color()
}

///|
impl IAttribute with fn as_float(self) -> AttrFloat? {
  self.as_attribute().as_float()
}

///|
impl IAttribute with fn as_font_desc(self) -> AttrFontDesc? {
  self.as_attribute().as_font_desc()
}

///|
impl IAttribute with fn as_font_features(self) -> AttrFontFeatures? {
  self.as_attribute().as_font_features()
}

///|
impl IAttribute with fn as_int(self) -> AttrInt? {
  self.as_attribute().as_int()
}

///|
impl IAttribute with fn as_language(self) -> AttrLanguage? {
  self.as_attribute().as_language()
}

///|
impl IAttribute with fn as_shape(self) -> AttrShape? {
  self.as_attribute().as_shape()
}

///|
impl IAttribute with fn as_size(self) -> AttrSize? {
  self.as_attribute().as_size()
}

///|
impl IAttribute with fn as_string(self) -> AttrString? {
  self.as_attribute().as_string()
}

///|
impl IAttribute with fn equal(self, attr2) -> Bool {
  self.as_attribute().equal(attr2)
}

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/struct.Attribute.html).
#borrow(self_)
pub extern "c" fn Attribute::get_start_index(self_ : Attribute) -> UInt = "moonbit_pango_attribute_start_index_get"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/struct.Attribute.html).
#borrow(self_)
pub extern "c" fn Attribute::set_start_index(self_ : Attribute, value : UInt) = "moonbit_pango_attribute_start_index_set"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/struct.Attribute.html).
#borrow(self_)
pub extern "c" fn Attribute::get_end_index(self_ : Attribute) -> UInt = "moonbit_pango_attribute_end_index_get"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/struct.Attribute.html).
#borrow(self_)
pub extern "c" fn Attribute::set_end_index(self_ : Attribute, value : UInt) = "moonbit_pango_attribute_end_index_set"