// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IFilenameCompleter {
  fn as_filename_completer(Self) -> FilenameCompleter
  fn get_completion_suffix(Self, String) -> String? = _
  fn set_dirs_only(Self, Bool) -> Unit = _
  fn connect_got_completion_data(Self, (FilenameCompleter) -> Unit) -> UInt64 = _
}

///|
pub impl IFilenameCompleter for FilenameCompleter with fn as_filename_completer(
  self,
) {
  self
}

///|
/// Implementation contract for FilenameCompleter.got_completion_data. Self is the retained MoonBit state; the second parameter is the invoked FilenameCompleter object.
pub(open) trait VFilenameCompleterGotCompletionData {
  fn got_completion_data(Self, FilenameCompleter) -> Unit
}

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

///|
#borrow(self_, initial_text)
extern "c" fn moonbit_g_filename_completer_get_completion_suffix(
  self_ : FilenameCompleter,
  initial_text : Bytes,
) -> @glib.Nullable[Bytes] = "moonbit_g_filename_completer_get_completion_suffix"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FilenameCompleter.get_completion_suffix.html).
pub fn FilenameCompleter::get_completion_suffix(
  self : FilenameCompleter,
  initial_text : String,
) -> String? {
  let result = moonbit_g_filename_completer_get_completion_suffix(
    self,
    @encoding/utf8.encode(initial_text),
  )
  match result.to_option() {
    Some(bytes) => Some(@encoding/utf8.decode_lossy(bytes))
    None => None
  }
}

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FilenameCompleter.set_dirs_only.html).
#borrow(self)
pub extern "c" fn FilenameCompleter::set_dirs_only(
  self : FilenameCompleter,
  dirs_only : Bool,
) = "moonbit_g_filename_completer_set_dirs_only"

///|
#borrow(instance)
extern "c" fn g_filename_completer_connect_got_completion_data(
  instance : FilenameCompleter,
  function : FuncRef[(FilenameCompleter, (FilenameCompleter) -> Unit) -> Unit],
  closure : (FilenameCompleter) -> Unit,
) -> UInt64 = "moonbit_g_filename_completer_connect_got_completion_data"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/signal.FilenameCompleter.got-completion-data.html).
pub fn FilenameCompleter::connect_got_completion_data(
  self : FilenameCompleter,
  f : (FilenameCompleter) -> Unit,
) -> UInt64 {
  g_filename_completer_connect_got_completion_data(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
impl IFilenameCompleter with fn get_completion_suffix(self, initial_text) -> String? {
  self.as_filename_completer().get_completion_suffix(initial_text)
}

///|
impl IFilenameCompleter with fn set_dirs_only(self, dirs_only) -> Unit {
  self.as_filename_completer().set_dirs_only(dirs_only)
}

///|
impl IFilenameCompleter with fn connect_got_completion_data(self, f) -> UInt64 {
  self.as_filename_completer().connect_got_completion_data(f)
}

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

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