// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IInetAddressMask {
  fn as_inet_address_mask(Self) -> InetAddressMask
  fn equal(Self, &IInetAddressMask) -> Bool = _
  fn get_address(Self) -> InetAddress = _
  fn get_family(Self) -> SocketFamily = _
  fn get_length(Self) -> UInt = _
  fn matches(Self, &IInetAddress) -> Bool = _
  fn to_string(Self) -> String = _
}

///|
pub impl IInetAddressMask for InetAddressMask with fn as_inet_address_mask(self) {
  self
}

///|
#borrow(addr, error)
extern "c" fn moonbit_g_inet_address_mask_new(
  addr : InetAddress,
  length : UInt,
  error : Ref[@glib.Nullable[@glib.Error_]],
) -> InetAddressMask = "moonbit_g_inet_address_mask_new"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/ctor.InetAddressMask.new.html).
pub fn InetAddressMask::new(
  addr : &IInetAddress,
  length : UInt,
) -> InetAddressMask raise @glib.Error_ {
  let error_ : Ref[@glib.Nullable[@glib.Error_]] = Ref(@glib.Nullable::null())
  let result = moonbit_g_inet_address_mask_new(
    addr.as_inet_address(),
    length,
    error_,
  )
  match error_.val.to_option() {
    Some(e) => raise e
    None => result
  }
}

///|
#borrow(mask_string, error)
extern "c" fn moonbit_g_inet_address_mask_new_from_string(
  mask_string : Bytes,
  error : Ref[@glib.Nullable[@glib.Error_]],
) -> InetAddressMask = "moonbit_g_inet_address_mask_new_from_string"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/ctor.InetAddressMask.new_from_string.html).
pub fn InetAddressMask::new_from_string(
  mask_string : String,
) -> InetAddressMask raise @glib.Error_ {
  let error_ : Ref[@glib.Nullable[@glib.Error_]] = Ref(@glib.Nullable::null())
  let result = moonbit_g_inet_address_mask_new_from_string(
    @encoding/utf8.encode(mask_string),
    error_,
  )
  match error_.val.to_option() {
    Some(e) => raise e
    None => result
  }
}

///|
#borrow(self_, mask2)
extern "c" fn moonbit_g_inet_address_mask_equal(
  self_ : InetAddressMask,
  mask2 : InetAddressMask,
) -> Bool = "moonbit_g_inet_address_mask_equal"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.InetAddressMask.equal.html).
pub fn InetAddressMask::equal(
  self : InetAddressMask,
  mask2 : &IInetAddressMask,
) -> Bool {
  moonbit_g_inet_address_mask_equal(self, mask2.as_inet_address_mask())
}

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.InetAddressMask.get_address.html).
#borrow(self)
pub extern "c" fn InetAddressMask::get_address(
  self : InetAddressMask,
) -> InetAddress = "moonbit_g_inet_address_mask_get_address"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.InetAddressMask.get_family.html).
#borrow(self)
pub extern "c" fn InetAddressMask::get_family(
  self : InetAddressMask,
) -> SocketFamily = "moonbit_g_inet_address_mask_get_family"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.InetAddressMask.get_length.html).
#borrow(self)
pub extern "c" fn InetAddressMask::get_length(self : InetAddressMask) -> UInt = "moonbit_g_inet_address_mask_get_length"

///|
#borrow(self_, address)
extern "c" fn moonbit_g_inet_address_mask_matches(
  self_ : InetAddressMask,
  address : InetAddress,
) -> Bool = "moonbit_g_inet_address_mask_matches"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.InetAddressMask.matches.html).
pub fn InetAddressMask::matches(
  self : InetAddressMask,
  address : &IInetAddress,
) -> Bool {
  moonbit_g_inet_address_mask_matches(self, address.as_inet_address())
}

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

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

///|
#borrow(self_, value)
extern "c" fn moonbit_g_inet_address_mask_set_address(
  self_ : InetAddressMask,
  value : @glib.Nullable[InetAddress],
) = "moonbit_g_inet_address_mask_set_address"

///|
pub fn InetAddressMask::set_address(
  self : InetAddressMask,
  value : InetAddress?,
) -> Unit {
  moonbit_g_inet_address_mask_set_address(
    self,
    match value {
      Some(v) => @glib.Nullable::some(v)
      None => @glib.Nullable::null()
    },
  )
}

///|
#borrow(self_, value)
pub extern "c" fn InetAddressMask::set_length(
  self_ : InetAddressMask,
  value : UInt,
) = "moonbit_g_inet_address_mask_set_length"

///|
impl IInetAddressMask with fn equal(self, mask2) -> Bool {
  self.as_inet_address_mask().equal(mask2)
}

///|
impl IInetAddressMask with fn get_address(self) -> InetAddress {
  self.as_inet_address_mask().get_address()
}

///|
impl IInetAddressMask with fn get_family(self) -> SocketFamily {
  self.as_inet_address_mask().get_family()
}

///|
impl IInetAddressMask with fn get_length(self) -> UInt {
  self.as_inet_address_mask().get_length()
}

///|
impl IInetAddressMask with fn matches(self, address) -> Bool {
  self.as_inet_address_mask().matches(address)
}

///|
impl IInetAddressMask with fn to_string(self) -> String {
  self.as_inet_address_mask().to_string()
}

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

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

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

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