// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IDataOutputStream {
  fn as_data_output_stream(Self) -> DataOutputStream
  fn get_byte_order(Self) -> DataStreamByteOrder = _
  fn put_byte(Self, UInt, &ICancellable?) -> Bool raise @glib.Error_ = _
  fn put_int16(Self, Int, &ICancellable?) -> Bool raise @glib.Error_ = _
  fn put_int32(Self, Int, &ICancellable?) -> Bool raise @glib.Error_ = _
  fn put_int64(Self, Int64, &ICancellable?) -> Bool raise @glib.Error_ = _
  fn put_string(Self, String, &ICancellable?) -> Bool raise @glib.Error_ = _
  fn put_uint16(Self, UInt, &ICancellable?) -> Bool raise @glib.Error_ = _
  fn put_uint32(Self, UInt, &ICancellable?) -> Bool raise @glib.Error_ = _
  fn put_uint64(Self, UInt64, &ICancellable?) -> Bool raise @glib.Error_ = _
  fn set_byte_order(Self, DataStreamByteOrder) -> Unit = _
}

///|
pub impl IDataOutputStream for DataOutputStream with fn as_data_output_stream(
  self,
) {
  self
}

///|
#borrow(base_stream)
extern "c" fn moonbit_g_data_output_stream_new(
  base_stream : OutputStream,
) -> DataOutputStream = "moonbit_g_data_output_stream_new"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/ctor.DataOutputStream.new.html).
pub fn DataOutputStream::new(base_stream : &IOutputStream) -> DataOutputStream {
  moonbit_g_data_output_stream_new(base_stream.as_output_stream())
}

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DataOutputStream.get_byte_order.html).
#borrow(self)
pub extern "c" fn DataOutputStream::get_byte_order(
  self : DataOutputStream,
) -> DataStreamByteOrder = "moonbit_g_data_output_stream_get_byte_order"

///|
#borrow(self_, cancellable, error)
extern "c" fn moonbit_g_data_output_stream_put_byte(
  self_ : DataOutputStream,
  data : UInt,
  cancellable : @glib.Nullable[Cancellable],
  error : Ref[@glib.Nullable[@glib.Error_]],
) -> Bool = "moonbit_g_data_output_stream_put_byte"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DataOutputStream.put_byte.html).
pub fn DataOutputStream::put_byte(
  self : DataOutputStream,
  data : UInt,
  cancellable : &ICancellable?,
) -> Bool raise @glib.Error_ {
  let error_ : Ref[@glib.Nullable[@glib.Error_]] = Ref(@glib.Nullable::null())
  let result = moonbit_g_data_output_stream_put_byte(
    self,
    data,
    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
}

///|
#borrow(self_, cancellable, error)
extern "c" fn moonbit_g_data_output_stream_put_int16(
  self_ : DataOutputStream,
  data : Int,
  cancellable : @glib.Nullable[Cancellable],
  error : Ref[@glib.Nullable[@glib.Error_]],
) -> Bool = "moonbit_g_data_output_stream_put_int16"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DataOutputStream.put_int16.html).
pub fn DataOutputStream::put_int16(
  self : DataOutputStream,
  data : Int,
  cancellable : &ICancellable?,
) -> Bool raise @glib.Error_ {
  let error_ : Ref[@glib.Nullable[@glib.Error_]] = Ref(@glib.Nullable::null())
  let result = moonbit_g_data_output_stream_put_int16(
    self,
    data,
    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
}

///|
#borrow(self_, cancellable, error)
extern "c" fn moonbit_g_data_output_stream_put_int32(
  self_ : DataOutputStream,
  data : Int,
  cancellable : @glib.Nullable[Cancellable],
  error : Ref[@glib.Nullable[@glib.Error_]],
) -> Bool = "moonbit_g_data_output_stream_put_int32"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DataOutputStream.put_int32.html).
pub fn DataOutputStream::put_int32(
  self : DataOutputStream,
  data : Int,
  cancellable : &ICancellable?,
) -> Bool raise @glib.Error_ {
  let error_ : Ref[@glib.Nullable[@glib.Error_]] = Ref(@glib.Nullable::null())
  let result = moonbit_g_data_output_stream_put_int32(
    self,
    data,
    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
}

///|
#borrow(self_, cancellable, error)
extern "c" fn moonbit_g_data_output_stream_put_int64(
  self_ : DataOutputStream,
  data : Int64,
  cancellable : @glib.Nullable[Cancellable],
  error : Ref[@glib.Nullable[@glib.Error_]],
) -> Bool = "moonbit_g_data_output_stream_put_int64"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DataOutputStream.put_int64.html).
pub fn DataOutputStream::put_int64(
  self : DataOutputStream,
  data : Int64,
  cancellable : &ICancellable?,
) -> Bool raise @glib.Error_ {
  let error_ : Ref[@glib.Nullable[@glib.Error_]] = Ref(@glib.Nullable::null())
  let result = moonbit_g_data_output_stream_put_int64(
    self,
    data,
    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
}

///|
#borrow(self_, str, cancellable, error)
extern "c" fn moonbit_g_data_output_stream_put_string(
  self_ : DataOutputStream,
  str : Bytes,
  cancellable : @glib.Nullable[Cancellable],
  error : Ref[@glib.Nullable[@glib.Error_]],
) -> Bool = "moonbit_g_data_output_stream_put_string"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DataOutputStream.put_string.html).
pub fn DataOutputStream::put_string(
  self : DataOutputStream,
  str : String,
  cancellable : &ICancellable?,
) -> Bool raise @glib.Error_ {
  let error_ : Ref[@glib.Nullable[@glib.Error_]] = Ref(@glib.Nullable::null())
  let result = moonbit_g_data_output_stream_put_string(
    self,
    @encoding/utf8.encode(str),
    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
}

///|
#borrow(self_, cancellable, error)
extern "c" fn moonbit_g_data_output_stream_put_uint16(
  self_ : DataOutputStream,
  data : UInt,
  cancellable : @glib.Nullable[Cancellable],
  error : Ref[@glib.Nullable[@glib.Error_]],
) -> Bool = "moonbit_g_data_output_stream_put_uint16"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DataOutputStream.put_uint16.html).
pub fn DataOutputStream::put_uint16(
  self : DataOutputStream,
  data : UInt,
  cancellable : &ICancellable?,
) -> Bool raise @glib.Error_ {
  let error_ : Ref[@glib.Nullable[@glib.Error_]] = Ref(@glib.Nullable::null())
  let result = moonbit_g_data_output_stream_put_uint16(
    self,
    data,
    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
}

///|
#borrow(self_, cancellable, error)
extern "c" fn moonbit_g_data_output_stream_put_uint32(
  self_ : DataOutputStream,
  data : UInt,
  cancellable : @glib.Nullable[Cancellable],
  error : Ref[@glib.Nullable[@glib.Error_]],
) -> Bool = "moonbit_g_data_output_stream_put_uint32"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DataOutputStream.put_uint32.html).
pub fn DataOutputStream::put_uint32(
  self : DataOutputStream,
  data : UInt,
  cancellable : &ICancellable?,
) -> Bool raise @glib.Error_ {
  let error_ : Ref[@glib.Nullable[@glib.Error_]] = Ref(@glib.Nullable::null())
  let result = moonbit_g_data_output_stream_put_uint32(
    self,
    data,
    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
}

///|
#borrow(self_, cancellable, error)
extern "c" fn moonbit_g_data_output_stream_put_uint64(
  self_ : DataOutputStream,
  data : UInt64,
  cancellable : @glib.Nullable[Cancellable],
  error : Ref[@glib.Nullable[@glib.Error_]],
) -> Bool = "moonbit_g_data_output_stream_put_uint64"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DataOutputStream.put_uint64.html).
pub fn DataOutputStream::put_uint64(
  self : DataOutputStream,
  data : UInt64,
  cancellable : &ICancellable?,
) -> Bool raise @glib.Error_ {
  let error_ : Ref[@glib.Nullable[@glib.Error_]] = Ref(@glib.Nullable::null())
  let result = moonbit_g_data_output_stream_put_uint64(
    self,
    data,
    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
}

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.DataOutputStream.set_byte_order.html).
#borrow(self)
pub extern "c" fn DataOutputStream::set_byte_order(
  self : DataOutputStream,
  order : DataStreamByteOrder,
) = "moonbit_g_data_output_stream_set_byte_order"

///|
impl IDataOutputStream with fn get_byte_order(self) -> DataStreamByteOrder {
  self.as_data_output_stream().get_byte_order()
}

///|
impl IDataOutputStream with fn put_byte(self, data, cancellable) -> Bool raise @glib.Error_ {
  self.as_data_output_stream().put_byte(data, cancellable)
}

///|
impl IDataOutputStream with fn put_int16(self, data, cancellable) -> Bool raise @glib.Error_ {
  self.as_data_output_stream().put_int16(data, cancellable)
}

///|
impl IDataOutputStream with fn put_int32(self, data, cancellable) -> Bool raise @glib.Error_ {
  self.as_data_output_stream().put_int32(data, cancellable)
}

///|
impl IDataOutputStream with fn put_int64(self, data, cancellable) -> Bool raise @glib.Error_ {
  self.as_data_output_stream().put_int64(data, cancellable)
}

///|
impl IDataOutputStream with fn put_string(self, str, cancellable) -> Bool raise @glib.Error_ {
  self.as_data_output_stream().put_string(str, cancellable)
}

///|
impl IDataOutputStream with fn put_uint16(self, data, cancellable) -> Bool raise @glib.Error_ {
  self.as_data_output_stream().put_uint16(data, cancellable)
}

///|
impl IDataOutputStream with fn put_uint32(self, data, cancellable) -> Bool raise @glib.Error_ {
  self.as_data_output_stream().put_uint32(data, cancellable)
}

///|
impl IDataOutputStream with fn put_uint64(self, data, cancellable) -> Bool raise @glib.Error_ {
  self.as_data_output_stream().put_uint64(data, cancellable)
}

///|
impl IDataOutputStream with fn set_byte_order(self, order) -> Unit {
  self.as_data_output_stream().set_byte_order(order)
}

///|
pub fn DataOutputStream::as_filter_output_stream(
  self : DataOutputStream,
) -> FilterOutputStream = "%identity"

///|
pub impl IFilterOutputStream for DataOutputStream with fn as_filter_output_stream(
  self,
) {
  self.as_filter_output_stream()
}

///|
pub fn DataOutputStream::as_output_stream(
  self : DataOutputStream,
) -> OutputStream = "%identity"

///|
pub impl IOutputStream for DataOutputStream with fn as_output_stream(self) {
  self.as_output_stream()
}

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

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

///|
pub fn DataOutputStream::as_seekable(self : DataOutputStream) -> Seekable = "%identity"

///|
pub impl ISeekable for DataOutputStream with fn as_seekable(self) {
  self.as_seekable()
}