// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IConverterOutputStream {
  fn as_converter_output_stream(Self) -> ConverterOutputStream
  fn get_converter(Self) -> Converter = _
}

///|
pub impl IConverterOutputStream for ConverterOutputStream with fn as_converter_output_stream(
  self,
) {
  self
}

///|
#borrow(base_stream, converter)
extern "c" fn moonbit_g_converter_output_stream_new(
  base_stream : OutputStream,
  converter : Converter,
) -> ConverterOutputStream = "moonbit_g_converter_output_stream_new"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/ctor.ConverterOutputStream.new.html).
pub fn ConverterOutputStream::new(
  base_stream : &IOutputStream,
  converter : &IConverter,
) -> ConverterOutputStream {
  moonbit_g_converter_output_stream_new(
    base_stream.as_output_stream(),
    converter.as_converter(),
  )
}

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.ConverterOutputStream.get_converter.html).
#borrow(self)
pub extern "c" fn ConverterOutputStream::get_converter(
  self : ConverterOutputStream,
) -> Converter = "moonbit_g_converter_output_stream_get_converter"

///|
impl IConverterOutputStream with fn get_converter(self) -> Converter {
  self.as_converter_output_stream().get_converter()
}

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

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

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

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

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

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

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

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