// GENERATED — DO NOT EDIT

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

///|
pub(open) trait ISimpleIOStream {
  fn as_simple_io_stream(Self) -> SimpleIOStream
}

///|
pub impl ISimpleIOStream for SimpleIOStream with fn as_simple_io_stream(self) {
  self
}

///|
#borrow(input_stream, output_stream)
extern "c" fn moonbit_g_simple_io_stream_new(
  input_stream : InputStream,
  output_stream : OutputStream,
) -> SimpleIOStream = "moonbit_g_simple_io_stream_new"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/ctor.SimpleIOStream.new.html).
pub fn SimpleIOStream::new(
  input_stream : &IInputStream,
  output_stream : &IOutputStream,
) -> SimpleIOStream {
  moonbit_g_simple_io_stream_new(
    input_stream.as_input_stream(),
    output_stream.as_output_stream(),
  )
}

///|
#borrow(self_)
extern "c" fn moonbit_g_simple_io_stream_get_input_stream(
  self_ : SimpleIOStream,
) -> @glib.Nullable[InputStream] = "moonbit_g_simple_io_stream_get_input_stream"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/property.SimpleIOStream.input-stream.html).
pub fn SimpleIOStream::get_input_stream(self : SimpleIOStream) -> InputStream? {
  moonbit_g_simple_io_stream_get_input_stream(self).to_option()
}

///|
#borrow(self_)
extern "c" fn moonbit_g_simple_io_stream_get_output_stream(
  self_ : SimpleIOStream,
) -> @glib.Nullable[OutputStream] = "moonbit_g_simple_io_stream_get_output_stream"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/property.SimpleIOStream.output-stream.html).
pub fn SimpleIOStream::get_output_stream(
  self : SimpleIOStream,
) -> OutputStream? {
  moonbit_g_simple_io_stream_get_output_stream(self).to_option()
}

///|
pub fn SimpleIOStream::as_io_stream(self : SimpleIOStream) -> IOStream = "%identity"

///|
pub impl IIOStream for SimpleIOStream with fn as_io_stream(self) {
  self.as_io_stream()
}

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

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