// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IDatagramBased {
  fn as_datagram_based(Self) -> DatagramBased
  fn condition_check(Self, @glib.IOCondition) -> @glib.IOCondition = _
  fn condition_wait(Self, @glib.IOCondition, Int64, &ICancellable?) -> Bool raise @glib.Error_ = _
}

///|
pub impl IDatagramBased for DatagramBased with fn as_datagram_based(self) {
  self
}

///|
#borrow(self_)
extern "c" fn moonbit_g_datagram_based_condition_check(
  self_ : DatagramBased,
  condition : Int,
) -> Int = "moonbit_g_datagram_based_condition_check"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DatagramBased.condition_check.html).
pub fn DatagramBased::condition_check(
  self : DatagramBased,
  condition : @glib.IOCondition,
) -> @glib.IOCondition {
  @glib.IOCondition::from_int(
    moonbit_g_datagram_based_condition_check(self, condition.to_int()),
  )
}

///|
#borrow(self_, cancellable, error)
extern "c" fn moonbit_g_datagram_based_condition_wait(
  self_ : DatagramBased,
  condition : Int,
  timeout : Int64,
  cancellable : @glib.Nullable[Cancellable],
  error : Ref[@glib.Nullable[@glib.Error_]],
) -> Bool = "moonbit_g_datagram_based_condition_wait"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DatagramBased.condition_wait.html).
pub fn DatagramBased::condition_wait(
  self : DatagramBased,
  condition : @glib.IOCondition,
  timeout : Int64,
  cancellable : &ICancellable?,
) -> Bool raise @glib.Error_ {
  let error_ : Ref[@glib.Nullable[@glib.Error_]] = Ref(@glib.Nullable::null())
  let result = moonbit_g_datagram_based_condition_wait(
    self,
    condition.to_int(),
    timeout,
    match cancellable {
      Some(v) => @glib.Nullable::some(v.as_cancellable())
      None => @glib.Nullable::null()
    },
    error_,
  )
  match error_.val.to_option() {
    Some(e) => raise e
    None => ()
  }
  result
}

///|
impl IDatagramBased with fn condition_check(self, condition) -> @glib.IOCondition {
  self.as_datagram_based().condition_check(condition)
}

///|
impl IDatagramBased with fn condition_wait(
  self,
  condition,
  timeout,
  cancellable,
) -> Bool raise @glib.Error_ {
  self.as_datagram_based().condition_wait(condition, timeout, cancellable)
}