// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IMemoryOutputStream {
  fn as_memory_output_stream(Self) -> MemoryOutputStream
  fn get_data_size(Self) -> UInt64 = _
  fn get_size(Self) -> UInt64 = _
  fn steal_as_bytes(Self) -> Bytes = _
}

///|
pub impl IMemoryOutputStream for MemoryOutputStream with fn as_memory_output_stream(
  self,
) {
  self
}

///|
/// [Upstream documentation](https://docs.gtk.org/gio/ctor.MemoryOutputStream.new_resizable.html).
pub extern "c" fn MemoryOutputStream::new_resizable() -> MemoryOutputStream = "moonbit_g_memory_output_stream_new_resizable"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.MemoryOutputStream.get_data_size.html).
#borrow(self)
pub extern "c" fn MemoryOutputStream::get_data_size(
  self : MemoryOutputStream,
) -> UInt64 = "moonbit_g_memory_output_stream_get_data_size"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.MemoryOutputStream.get_size.html).
#borrow(self)
pub extern "c" fn MemoryOutputStream::get_size(
  self : MemoryOutputStream,
) -> UInt64 = "moonbit_g_memory_output_stream_get_size"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.MemoryOutputStream.steal_as_bytes.html).
#borrow(self)
pub extern "c" fn MemoryOutputStream::steal_as_bytes(
  self : MemoryOutputStream,
) -> Bytes = "moonbit_g_memory_output_stream_steal_as_bytes"

///|
impl IMemoryOutputStream with fn get_data_size(self) -> UInt64 {
  self.as_memory_output_stream().get_data_size()
}

///|
impl IMemoryOutputStream with fn get_size(self) -> UInt64 {
  self.as_memory_output_stream().get_size()
}

///|
impl IMemoryOutputStream with fn steal_as_bytes(self) -> Bytes {
  self.as_memory_output_stream().steal_as_bytes()
}

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

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

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

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

///|
pub fn MemoryOutputStream::as_pollable_output_stream(
  self : MemoryOutputStream,
) -> PollableOutputStream = "%identity"

///|
pub impl IPollableOutputStream for MemoryOutputStream with fn as_pollable_output_stream(
  self,
) {
  self.as_pollable_output_stream()
}

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

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