// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IConverterInputStream {
  fn as_converter_input_stream(Self) -> ConverterInputStream
  fn get_converter(Self) -> Converter = _
}

///|
pub impl IConverterInputStream for ConverterInputStream with fn as_converter_input_stream(
  self,
) {
  self
}

///|
#borrow(base_stream, converter)
extern "c" fn moonbit_g_converter_input_stream_new(
  base_stream : InputStream,
  converter : Converter,
) -> ConverterInputStream = "moonbit_g_converter_input_stream_new"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/ctor.ConverterInputStream.new.html).
pub fn ConverterInputStream::new(
  base_stream : &IInputStream,
  converter : &IConverter,
) -> ConverterInputStream {
  moonbit_g_converter_input_stream_new(
    base_stream.as_input_stream(),
    converter.as_converter(),
  )
}

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

///|
impl IConverterInputStream with fn get_converter(self) -> Converter {
  self.as_converter_input_stream().get_converter()
}

///|
pub fn ConverterInputStream::as_filter_input_stream(
  self : ConverterInputStream,
) -> FilterInputStream = "%identity"

///|
pub impl IFilterInputStream for ConverterInputStream with fn as_filter_input_stream(
  self,
) {
  self.as_filter_input_stream()
}

///|
pub fn ConverterInputStream::as_input_stream(
  self : ConverterInputStream,
) -> InputStream = "%identity"

///|
pub impl IInputStream for ConverterInputStream with fn as_input_stream(self) {
  self.as_input_stream()
}

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

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

///|
pub fn ConverterInputStream::as_pollable_input_stream(
  self : ConverterInputStream,
) -> PollableInputStream = "%identity"

///|
pub impl IPollableInputStream for ConverterInputStream with fn as_pollable_input_stream(
  self,
) {
  self.as_pollable_input_stream()
}