// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IFileInfo {
  fn as_file_info(Self) -> FileInfo
  fn clear_status(Self) -> Unit = _
  fn copy_into(Self, &IFileInfo) -> Unit = _
  fn dup(Self) -> FileInfo = _
  fn get_attribute_as_string(Self, String) -> String? = _
  fn get_attribute_boolean(Self, String) -> Bool = _
  fn get_attribute_byte_string(Self, String) -> String? = _
  fn get_attribute_file_path(Self, String) -> String? = _
  fn get_attribute_int32(Self, String) -> Int = _
  fn get_attribute_int64(Self, String) -> Int64 = _
  fn get_attribute_object(Self, String) -> @gobject.Object? = _
  fn get_attribute_status(Self, String) -> FileAttributeStatus = _
  fn get_attribute_string(Self, String) -> String? = _
  fn get_attribute_type(Self, String) -> FileAttributeType = _
  fn get_attribute_uint32(Self, String) -> UInt = _
  fn get_attribute_uint64(Self, String) -> UInt64 = _
  fn get_content_type(Self) -> String? = _
  fn get_display_name(Self) -> String = _
  fn get_edit_name(Self) -> String = _
  fn get_etag(Self) -> String? = _
  fn get_file_type(Self) -> FileType = _
  fn get_icon(Self) -> Icon? = _
  fn get_is_backup(Self) -> Bool = _
  fn get_is_hidden(Self) -> Bool = _
  fn get_is_symlink(Self) -> Bool = _
  fn get_name(Self) -> String = _
  fn get_size(Self) -> Int64 = _
  fn get_sort_order(Self) -> Int = _
  fn get_symbolic_icon(Self) -> Icon? = _
  fn get_symlink_target(Self) -> String? = _
  fn has_attribute(Self, String) -> Bool = _
  fn has_namespace(Self, String) -> Bool = _
  fn remove_attribute(Self, String) -> Unit = _
  fn set_attribute_boolean(Self, String, Bool) -> Unit = _
  fn set_attribute_byte_string(Self, String, String) -> Unit = _
  fn set_attribute_file_path(Self, String, String) -> Unit = _
  fn set_attribute_int32(Self, String, Int) -> Unit = _
  fn set_attribute_int64(Self, String, Int64) -> Unit = _
  fn set_attribute_object(Self, String, &@gobject.IObject) -> Unit = _
  fn set_attribute_status(Self, String, FileAttributeStatus) -> Bool = _
  fn set_attribute_string(Self, String, String) -> Unit = _
  fn set_attribute_stringv(Self, String, Array[String]) -> Unit = _
  fn set_attribute_uint32(Self, String, UInt) -> Unit = _
  fn set_attribute_uint64(Self, String, UInt64) -> Unit = _
  fn set_content_type(Self, String) -> Unit = _
  fn set_display_name(Self, String) -> Unit = _
  fn set_edit_name(Self, String) -> Unit = _
  fn set_file_type(Self, FileType) -> Unit = _
  fn set_icon(Self, &IIcon) -> Unit = _
  fn set_is_hidden(Self, Bool) -> Unit = _
  fn set_is_symlink(Self, Bool) -> Unit = _
  fn set_name(Self, String) -> Unit = _
  fn set_size(Self, Int64) -> Unit = _
  fn set_sort_order(Self, Int) -> Unit = _
  fn set_symbolic_icon(Self, &IIcon) -> Unit = _
  fn set_symlink_target(Self, String) -> Unit = _
  fn unset_attribute_mask(Self) -> Unit = _
}

///|
pub impl IFileInfo for FileInfo with fn as_file_info(self) {
  self
}

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

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.clear_status.html).
#borrow(self)
pub extern "c" fn FileInfo::clear_status(self : FileInfo) = "moonbit_g_file_info_clear_status"

///|
#borrow(self_, dest_info)
extern "c" fn moonbit_g_file_info_copy_into(
  self_ : FileInfo,
  dest_info : FileInfo,
) = "moonbit_g_file_info_copy_into"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.copy_into.html).
pub fn FileInfo::copy_into(self : FileInfo, dest_info : &IFileInfo) -> Unit {
  moonbit_g_file_info_copy_into(self, dest_info.as_file_info())
}

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.dup.html).
#borrow(self)
pub extern "c" fn FileInfo::dup(self : FileInfo) -> FileInfo = "moonbit_g_file_info_dup"

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_get_attribute_as_string(
  self_ : FileInfo,
  attribute : Bytes,
) -> @glib.Nullable[Bytes] = "moonbit_g_file_info_get_attribute_as_string"

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

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_get_attribute_boolean(
  self_ : FileInfo,
  attribute : Bytes,
) -> Bool = "moonbit_g_file_info_get_attribute_boolean"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.get_attribute_boolean.html).
pub fn FileInfo::get_attribute_boolean(
  self : FileInfo,
  attribute : String,
) -> Bool {
  moonbit_g_file_info_get_attribute_boolean(
    self,
    @encoding/utf8.encode(attribute),
  )
}

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_get_attribute_byte_string(
  self_ : FileInfo,
  attribute : Bytes,
) -> @glib.Nullable[Bytes] = "moonbit_g_file_info_get_attribute_byte_string"

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

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_get_attribute_file_path(
  self_ : FileInfo,
  attribute : Bytes,
) -> @glib.Nullable[Bytes] = "moonbit_g_file_info_get_attribute_file_path"

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

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_get_attribute_int32(
  self_ : FileInfo,
  attribute : Bytes,
) -> Int = "moonbit_g_file_info_get_attribute_int32"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.get_attribute_int32.html).
pub fn FileInfo::get_attribute_int32(
  self : FileInfo,
  attribute : String,
) -> Int {
  moonbit_g_file_info_get_attribute_int32(
    self,
    @encoding/utf8.encode(attribute),
  )
}

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_get_attribute_int64(
  self_ : FileInfo,
  attribute : Bytes,
) -> Int64 = "moonbit_g_file_info_get_attribute_int64"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.get_attribute_int64.html).
pub fn FileInfo::get_attribute_int64(
  self : FileInfo,
  attribute : String,
) -> Int64 {
  moonbit_g_file_info_get_attribute_int64(
    self,
    @encoding/utf8.encode(attribute),
  )
}

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_get_attribute_object(
  self_ : FileInfo,
  attribute : Bytes,
) -> @glib.Nullable[@gobject.Object] = "moonbit_g_file_info_get_attribute_object"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.get_attribute_object.html).
pub fn FileInfo::get_attribute_object(
  self : FileInfo,
  attribute : String,
) -> @gobject.Object? {
  let raw_result = moonbit_g_file_info_get_attribute_object(
    self,
    @encoding/utf8.encode(attribute),
  )
  raw_result.to_option()
}

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_get_attribute_status(
  self_ : FileInfo,
  attribute : Bytes,
) -> FileAttributeStatus = "moonbit_g_file_info_get_attribute_status"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.get_attribute_status.html).
pub fn FileInfo::get_attribute_status(
  self : FileInfo,
  attribute : String,
) -> FileAttributeStatus {
  moonbit_g_file_info_get_attribute_status(
    self,
    @encoding/utf8.encode(attribute),
  )
}

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_get_attribute_string(
  self_ : FileInfo,
  attribute : Bytes,
) -> @glib.Nullable[Bytes] = "moonbit_g_file_info_get_attribute_string"

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

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_get_attribute_type(
  self_ : FileInfo,
  attribute : Bytes,
) -> FileAttributeType = "moonbit_g_file_info_get_attribute_type"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.get_attribute_type.html).
pub fn FileInfo::get_attribute_type(
  self : FileInfo,
  attribute : String,
) -> FileAttributeType {
  moonbit_g_file_info_get_attribute_type(self, @encoding/utf8.encode(attribute))
}

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_get_attribute_uint32(
  self_ : FileInfo,
  attribute : Bytes,
) -> UInt = "moonbit_g_file_info_get_attribute_uint32"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.get_attribute_uint32.html).
pub fn FileInfo::get_attribute_uint32(
  self : FileInfo,
  attribute : String,
) -> UInt {
  moonbit_g_file_info_get_attribute_uint32(
    self,
    @encoding/utf8.encode(attribute),
  )
}

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_get_attribute_uint64(
  self_ : FileInfo,
  attribute : Bytes,
) -> UInt64 = "moonbit_g_file_info_get_attribute_uint64"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.get_attribute_uint64.html).
pub fn FileInfo::get_attribute_uint64(
  self : FileInfo,
  attribute : String,
) -> UInt64 {
  moonbit_g_file_info_get_attribute_uint64(
    self,
    @encoding/utf8.encode(attribute),
  )
}

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

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

///|
#borrow(self_)
extern "c" fn moonbit_g_file_info_get_display_name(self_ : FileInfo) -> Bytes = "moonbit_g_file_info_get_display_name"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.get_display_name.html).
pub fn FileInfo::get_display_name(self : FileInfo) -> String {
  @encoding/utf8.decode_lossy(moonbit_g_file_info_get_display_name(self))
}

///|
#borrow(self_)
extern "c" fn moonbit_g_file_info_get_edit_name(self_ : FileInfo) -> Bytes = "moonbit_g_file_info_get_edit_name"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.get_edit_name.html).
pub fn FileInfo::get_edit_name(self : FileInfo) -> String {
  @encoding/utf8.decode_lossy(moonbit_g_file_info_get_edit_name(self))
}

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

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

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.get_file_type.html).
#borrow(self)
pub extern "c" fn FileInfo::get_file_type(self : FileInfo) -> FileType = "moonbit_g_file_info_get_file_type"

///|
#borrow(self_)
extern "c" fn moonbit_g_file_info_get_icon(
  self_ : FileInfo,
) -> @glib.Nullable[Icon] = "moonbit_g_file_info_get_icon"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.get_icon.html).
pub fn FileInfo::get_icon(self : FileInfo) -> Icon? {
  let raw_result = moonbit_g_file_info_get_icon(self)
  raw_result.to_option()
}

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.get_is_backup.html).
#borrow(self)
pub extern "c" fn FileInfo::get_is_backup(self : FileInfo) -> Bool = "moonbit_g_file_info_get_is_backup"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.get_is_hidden.html).
#borrow(self)
pub extern "c" fn FileInfo::get_is_hidden(self : FileInfo) -> Bool = "moonbit_g_file_info_get_is_hidden"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.get_is_symlink.html).
#borrow(self)
pub extern "c" fn FileInfo::get_is_symlink(self : FileInfo) -> Bool = "moonbit_g_file_info_get_is_symlink"

///|
#borrow(self_)
extern "c" fn moonbit_g_file_info_get_name(self_ : FileInfo) -> Bytes = "moonbit_g_file_info_get_name"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.get_name.html).
pub fn FileInfo::get_name(self : FileInfo) -> String {
  @encoding/utf8.decode_lossy(moonbit_g_file_info_get_name(self))
}

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

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.get_sort_order.html).
#borrow(self)
pub extern "c" fn FileInfo::get_sort_order(self : FileInfo) -> Int = "moonbit_g_file_info_get_sort_order"

///|
#borrow(self_)
extern "c" fn moonbit_g_file_info_get_symbolic_icon(
  self_ : FileInfo,
) -> @glib.Nullable[Icon] = "moonbit_g_file_info_get_symbolic_icon"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.get_symbolic_icon.html).
pub fn FileInfo::get_symbolic_icon(self : FileInfo) -> Icon? {
  let raw_result = moonbit_g_file_info_get_symbolic_icon(self)
  raw_result.to_option()
}

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

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

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_has_attribute(
  self_ : FileInfo,
  attribute : Bytes,
) -> Bool = "moonbit_g_file_info_has_attribute"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.has_attribute.html).
pub fn FileInfo::has_attribute(self : FileInfo, attribute : String) -> Bool {
  moonbit_g_file_info_has_attribute(self, @encoding/utf8.encode(attribute))
}

///|
#borrow(self_, name_space)
extern "c" fn moonbit_g_file_info_has_namespace(
  self_ : FileInfo,
  name_space : Bytes,
) -> Bool = "moonbit_g_file_info_has_namespace"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.has_namespace.html).
pub fn FileInfo::has_namespace(self : FileInfo, name_space : String) -> Bool {
  moonbit_g_file_info_has_namespace(self, @encoding/utf8.encode(name_space))
}

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_remove_attribute(
  self_ : FileInfo,
  attribute : Bytes,
) = "moonbit_g_file_info_remove_attribute"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.remove_attribute.html).
pub fn FileInfo::remove_attribute(self : FileInfo, attribute : String) -> Unit {
  moonbit_g_file_info_remove_attribute(self, @encoding/utf8.encode(attribute))
}

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_set_attribute_boolean(
  self_ : FileInfo,
  attribute : Bytes,
  attr_value : Bool,
) = "moonbit_g_file_info_set_attribute_boolean"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_attribute_boolean.html).
pub fn FileInfo::set_attribute_boolean(
  self : FileInfo,
  attribute : String,
  attr_value : Bool,
) -> Unit {
  moonbit_g_file_info_set_attribute_boolean(
    self,
    @encoding/utf8.encode(attribute),
    attr_value,
  )
}

///|
#borrow(self_, attribute, attr_value)
extern "c" fn moonbit_g_file_info_set_attribute_byte_string(
  self_ : FileInfo,
  attribute : Bytes,
  attr_value : Bytes,
) = "moonbit_g_file_info_set_attribute_byte_string"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_attribute_byte_string.html).
pub fn FileInfo::set_attribute_byte_string(
  self : FileInfo,
  attribute : String,
  attr_value : String,
) -> Unit {
  moonbit_g_file_info_set_attribute_byte_string(
    self,
    @encoding/utf8.encode(attribute),
    @encoding/utf8.encode(attr_value),
  )
}

///|
#borrow(self_, attribute, attr_value)
extern "c" fn moonbit_g_file_info_set_attribute_file_path(
  self_ : FileInfo,
  attribute : Bytes,
  attr_value : Bytes,
) = "moonbit_g_file_info_set_attribute_file_path"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_attribute_file_path.html).
pub fn FileInfo::set_attribute_file_path(
  self : FileInfo,
  attribute : String,
  attr_value : String,
) -> Unit {
  moonbit_g_file_info_set_attribute_file_path(
    self,
    @encoding/utf8.encode(attribute),
    @encoding/utf8.encode(attr_value),
  )
}

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_set_attribute_int32(
  self_ : FileInfo,
  attribute : Bytes,
  attr_value : Int,
) = "moonbit_g_file_info_set_attribute_int32"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_attribute_int32.html).
pub fn FileInfo::set_attribute_int32(
  self : FileInfo,
  attribute : String,
  attr_value : Int,
) -> Unit {
  moonbit_g_file_info_set_attribute_int32(
    self,
    @encoding/utf8.encode(attribute),
    attr_value,
  )
}

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_set_attribute_int64(
  self_ : FileInfo,
  attribute : Bytes,
  attr_value : Int64,
) = "moonbit_g_file_info_set_attribute_int64"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_attribute_int64.html).
pub fn FileInfo::set_attribute_int64(
  self : FileInfo,
  attribute : String,
  attr_value : Int64,
) -> Unit {
  moonbit_g_file_info_set_attribute_int64(
    self,
    @encoding/utf8.encode(attribute),
    attr_value,
  )
}

///|
#borrow(self_, attribute, attr_value)
extern "c" fn moonbit_g_file_info_set_attribute_object(
  self_ : FileInfo,
  attribute : Bytes,
  attr_value : @gobject.Object,
) = "moonbit_g_file_info_set_attribute_object"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_attribute_object.html).
pub fn FileInfo::set_attribute_object(
  self : FileInfo,
  attribute : String,
  attr_value : &@gobject.IObject,
) -> Unit {
  moonbit_g_file_info_set_attribute_object(
    self,
    @encoding/utf8.encode(attribute),
    attr_value.as_object(),
  )
}

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_set_attribute_status(
  self_ : FileInfo,
  attribute : Bytes,
  status : FileAttributeStatus,
) -> Bool = "moonbit_g_file_info_set_attribute_status"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_attribute_status.html).
pub fn FileInfo::set_attribute_status(
  self : FileInfo,
  attribute : String,
  status : FileAttributeStatus,
) -> Bool {
  moonbit_g_file_info_set_attribute_status(
    self,
    @encoding/utf8.encode(attribute),
    status,
  )
}

///|
#borrow(self_, attribute, attr_value)
extern "c" fn moonbit_g_file_info_set_attribute_string(
  self_ : FileInfo,
  attribute : Bytes,
  attr_value : Bytes,
) = "moonbit_g_file_info_set_attribute_string"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_attribute_string.html).
pub fn FileInfo::set_attribute_string(
  self : FileInfo,
  attribute : String,
  attr_value : String,
) -> Unit {
  moonbit_g_file_info_set_attribute_string(
    self,
    @encoding/utf8.encode(attribute),
    @encoding/utf8.encode(attr_value),
  )
}

///|
#borrow(self_, attribute, __sa_attr_value)
extern "c" fn moonbit_g_file_info_set_attribute_stringv(
  self_ : FileInfo,
  attribute : Bytes,
  __sa_attr_value : FixedArray[Bytes],
) = "moonbit_g_file_info_set_attribute_stringv"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_attribute_stringv.html).
pub fn FileInfo::set_attribute_stringv(
  self : FileInfo,
  attribute : String,
  attr_value : Array[String],
) -> Unit {
  moonbit_g_file_info_set_attribute_stringv(
    self,
    @encoding/utf8.encode(attribute),
    FixedArray::from_array(attr_value.map(fn(s) { @encoding/utf8.encode(s) })),
  )
}

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_set_attribute_uint32(
  self_ : FileInfo,
  attribute : Bytes,
  attr_value : UInt,
) = "moonbit_g_file_info_set_attribute_uint32"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_attribute_uint32.html).
pub fn FileInfo::set_attribute_uint32(
  self : FileInfo,
  attribute : String,
  attr_value : UInt,
) -> Unit {
  moonbit_g_file_info_set_attribute_uint32(
    self,
    @encoding/utf8.encode(attribute),
    attr_value,
  )
}

///|
#borrow(self_, attribute)
extern "c" fn moonbit_g_file_info_set_attribute_uint64(
  self_ : FileInfo,
  attribute : Bytes,
  attr_value : UInt64,
) = "moonbit_g_file_info_set_attribute_uint64"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_attribute_uint64.html).
pub fn FileInfo::set_attribute_uint64(
  self : FileInfo,
  attribute : String,
  attr_value : UInt64,
) -> Unit {
  moonbit_g_file_info_set_attribute_uint64(
    self,
    @encoding/utf8.encode(attribute),
    attr_value,
  )
}

///|
#borrow(self_, content_type)
extern "c" fn moonbit_g_file_info_set_content_type(
  self_ : FileInfo,
  content_type : Bytes,
) = "moonbit_g_file_info_set_content_type"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_content_type.html).
pub fn FileInfo::set_content_type(
  self : FileInfo,
  content_type : String,
) -> Unit {
  moonbit_g_file_info_set_content_type(
    self,
    @encoding/utf8.encode(content_type),
  )
}

///|
#borrow(self_, display_name)
extern "c" fn moonbit_g_file_info_set_display_name(
  self_ : FileInfo,
  display_name : Bytes,
) = "moonbit_g_file_info_set_display_name"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_display_name.html).
pub fn FileInfo::set_display_name(
  self : FileInfo,
  display_name : String,
) -> Unit {
  moonbit_g_file_info_set_display_name(
    self,
    @encoding/utf8.encode(display_name),
  )
}

///|
#borrow(self_, edit_name)
extern "c" fn moonbit_g_file_info_set_edit_name(
  self_ : FileInfo,
  edit_name : Bytes,
) = "moonbit_g_file_info_set_edit_name"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_edit_name.html).
pub fn FileInfo::set_edit_name(self : FileInfo, edit_name : String) -> Unit {
  moonbit_g_file_info_set_edit_name(self, @encoding/utf8.encode(edit_name))
}

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_file_type.html).
#borrow(self)
pub extern "c" fn FileInfo::set_file_type(self : FileInfo, type_ : FileType) = "moonbit_g_file_info_set_file_type"

///|
#borrow(self_, icon)
extern "c" fn moonbit_g_file_info_set_icon(self_ : FileInfo, icon : Icon) = "moonbit_g_file_info_set_icon"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_icon.html).
pub fn FileInfo::set_icon(self : FileInfo, icon : &IIcon) -> Unit {
  moonbit_g_file_info_set_icon(self, icon.as_icon())
}

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_is_hidden.html).
#borrow(self)
pub extern "c" fn FileInfo::set_is_hidden(self : FileInfo, is_hidden : Bool) = "moonbit_g_file_info_set_is_hidden"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_is_symlink.html).
#borrow(self)
pub extern "c" fn FileInfo::set_is_symlink(self : FileInfo, is_symlink : Bool) = "moonbit_g_file_info_set_is_symlink"

///|
#borrow(self_, name)
extern "c" fn moonbit_g_file_info_set_name(self_ : FileInfo, name : Bytes) = "moonbit_g_file_info_set_name"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_name.html).
pub fn FileInfo::set_name(self : FileInfo, name : String) -> Unit {
  moonbit_g_file_info_set_name(self, @encoding/utf8.encode(name))
}

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_size.html).
#borrow(self)
pub extern "c" fn FileInfo::set_size(self : FileInfo, size : Int64) = "moonbit_g_file_info_set_size"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_sort_order.html).
#borrow(self)
pub extern "c" fn FileInfo::set_sort_order(self : FileInfo, sort_order : Int) = "moonbit_g_file_info_set_sort_order"

///|
#borrow(self_, icon)
extern "c" fn moonbit_g_file_info_set_symbolic_icon(
  self_ : FileInfo,
  icon : Icon,
) = "moonbit_g_file_info_set_symbolic_icon"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_symbolic_icon.html).
pub fn FileInfo::set_symbolic_icon(self : FileInfo, icon : &IIcon) -> Unit {
  moonbit_g_file_info_set_symbolic_icon(self, icon.as_icon())
}

///|
#borrow(self_, symlink_target)
extern "c" fn moonbit_g_file_info_set_symlink_target(
  self_ : FileInfo,
  symlink_target : Bytes,
) = "moonbit_g_file_info_set_symlink_target"

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.set_symlink_target.html).
pub fn FileInfo::set_symlink_target(
  self : FileInfo,
  symlink_target : String,
) -> Unit {
  moonbit_g_file_info_set_symlink_target(
    self,
    @encoding/utf8.encode(symlink_target),
  )
}

///|
/// [Upstream documentation](https://docs.gtk.org/gio/method.FileInfo.unset_attribute_mask.html).
#borrow(self)
pub extern "c" fn FileInfo::unset_attribute_mask(self : FileInfo) = "moonbit_g_file_info_unset_attribute_mask"

///|
impl IFileInfo with fn clear_status(self) -> Unit {
  self.as_file_info().clear_status()
}

///|
impl IFileInfo with fn copy_into(self, dest_info) -> Unit {
  self.as_file_info().copy_into(dest_info)
}

///|
impl IFileInfo with fn dup(self) -> FileInfo {
  self.as_file_info().dup()
}

///|
impl IFileInfo with fn get_attribute_as_string(self, attribute) -> String? {
  self.as_file_info().get_attribute_as_string(attribute)
}

///|
impl IFileInfo with fn get_attribute_boolean(self, attribute) -> Bool {
  self.as_file_info().get_attribute_boolean(attribute)
}

///|
impl IFileInfo with fn get_attribute_byte_string(self, attribute) -> String? {
  self.as_file_info().get_attribute_byte_string(attribute)
}

///|
impl IFileInfo with fn get_attribute_file_path(self, attribute) -> String? {
  self.as_file_info().get_attribute_file_path(attribute)
}

///|
impl IFileInfo with fn get_attribute_int32(self, attribute) -> Int {
  self.as_file_info().get_attribute_int32(attribute)
}

///|
impl IFileInfo with fn get_attribute_int64(self, attribute) -> Int64 {
  self.as_file_info().get_attribute_int64(attribute)
}

///|
impl IFileInfo with fn get_attribute_object(self, attribute) -> @gobject.Object? {
  self.as_file_info().get_attribute_object(attribute)
}

///|
impl IFileInfo with fn get_attribute_status(self, attribute) -> FileAttributeStatus {
  self.as_file_info().get_attribute_status(attribute)
}

///|
impl IFileInfo with fn get_attribute_string(self, attribute) -> String? {
  self.as_file_info().get_attribute_string(attribute)
}

///|
impl IFileInfo with fn get_attribute_type(self, attribute) -> FileAttributeType {
  self.as_file_info().get_attribute_type(attribute)
}

///|
impl IFileInfo with fn get_attribute_uint32(self, attribute) -> UInt {
  self.as_file_info().get_attribute_uint32(attribute)
}

///|
impl IFileInfo with fn get_attribute_uint64(self, attribute) -> UInt64 {
  self.as_file_info().get_attribute_uint64(attribute)
}

///|
impl IFileInfo with fn get_content_type(self) -> String? {
  self.as_file_info().get_content_type()
}

///|
impl IFileInfo with fn get_display_name(self) -> String {
  self.as_file_info().get_display_name()
}

///|
impl IFileInfo with fn get_edit_name(self) -> String {
  self.as_file_info().get_edit_name()
}

///|
impl IFileInfo with fn get_etag(self) -> String? {
  self.as_file_info().get_etag()
}

///|
impl IFileInfo with fn get_file_type(self) -> FileType {
  self.as_file_info().get_file_type()
}

///|
impl IFileInfo with fn get_icon(self) -> Icon? {
  self.as_file_info().get_icon()
}

///|
impl IFileInfo with fn get_is_backup(self) -> Bool {
  self.as_file_info().get_is_backup()
}

///|
impl IFileInfo with fn get_is_hidden(self) -> Bool {
  self.as_file_info().get_is_hidden()
}

///|
impl IFileInfo with fn get_is_symlink(self) -> Bool {
  self.as_file_info().get_is_symlink()
}

///|
impl IFileInfo with fn get_name(self) -> String {
  self.as_file_info().get_name()
}

///|
impl IFileInfo with fn get_size(self) -> Int64 {
  self.as_file_info().get_size()
}

///|
impl IFileInfo with fn get_sort_order(self) -> Int {
  self.as_file_info().get_sort_order()
}

///|
impl IFileInfo with fn get_symbolic_icon(self) -> Icon? {
  self.as_file_info().get_symbolic_icon()
}

///|
impl IFileInfo with fn get_symlink_target(self) -> String? {
  self.as_file_info().get_symlink_target()
}

///|
impl IFileInfo with fn has_attribute(self, attribute) -> Bool {
  self.as_file_info().has_attribute(attribute)
}

///|
impl IFileInfo with fn has_namespace(self, name_space) -> Bool {
  self.as_file_info().has_namespace(name_space)
}

///|
impl IFileInfo with fn remove_attribute(self, attribute) -> Unit {
  self.as_file_info().remove_attribute(attribute)
}

///|
impl IFileInfo with fn set_attribute_boolean(self, attribute, attr_value) -> Unit {
  self.as_file_info().set_attribute_boolean(attribute, attr_value)
}

///|
impl IFileInfo with fn set_attribute_byte_string(self, attribute, attr_value) -> Unit {
  self.as_file_info().set_attribute_byte_string(attribute, attr_value)
}

///|
impl IFileInfo with fn set_attribute_file_path(self, attribute, attr_value) -> Unit {
  self.as_file_info().set_attribute_file_path(attribute, attr_value)
}

///|
impl IFileInfo with fn set_attribute_int32(self, attribute, attr_value) -> Unit {
  self.as_file_info().set_attribute_int32(attribute, attr_value)
}

///|
impl IFileInfo with fn set_attribute_int64(self, attribute, attr_value) -> Unit {
  self.as_file_info().set_attribute_int64(attribute, attr_value)
}

///|
impl IFileInfo with fn set_attribute_object(self, attribute, attr_value) -> Unit {
  self.as_file_info().set_attribute_object(attribute, attr_value)
}

///|
impl IFileInfo with fn set_attribute_status(self, attribute, status) -> Bool {
  self.as_file_info().set_attribute_status(attribute, status)
}

///|
impl IFileInfo with fn set_attribute_string(self, attribute, attr_value) -> Unit {
  self.as_file_info().set_attribute_string(attribute, attr_value)
}

///|
impl IFileInfo with fn set_attribute_stringv(self, attribute, attr_value) -> Unit {
  self.as_file_info().set_attribute_stringv(attribute, attr_value)
}

///|
impl IFileInfo with fn set_attribute_uint32(self, attribute, attr_value) -> Unit {
  self.as_file_info().set_attribute_uint32(attribute, attr_value)
}

///|
impl IFileInfo with fn set_attribute_uint64(self, attribute, attr_value) -> Unit {
  self.as_file_info().set_attribute_uint64(attribute, attr_value)
}

///|
impl IFileInfo with fn set_content_type(self, content_type) -> Unit {
  self.as_file_info().set_content_type(content_type)
}

///|
impl IFileInfo with fn set_display_name(self, display_name) -> Unit {
  self.as_file_info().set_display_name(display_name)
}

///|
impl IFileInfo with fn set_edit_name(self, edit_name) -> Unit {
  self.as_file_info().set_edit_name(edit_name)
}

///|
impl IFileInfo with fn set_file_type(self, type_) -> Unit {
  self.as_file_info().set_file_type(type_)
}

///|
impl IFileInfo with fn set_icon(self, icon) -> Unit {
  self.as_file_info().set_icon(icon)
}

///|
impl IFileInfo with fn set_is_hidden(self, is_hidden) -> Unit {
  self.as_file_info().set_is_hidden(is_hidden)
}

///|
impl IFileInfo with fn set_is_symlink(self, is_symlink) -> Unit {
  self.as_file_info().set_is_symlink(is_symlink)
}

///|
impl IFileInfo with fn set_name(self, name) -> Unit {
  self.as_file_info().set_name(name)
}

///|
impl IFileInfo with fn set_size(self, size) -> Unit {
  self.as_file_info().set_size(size)
}

///|
impl IFileInfo with fn set_sort_order(self, sort_order) -> Unit {
  self.as_file_info().set_sort_order(sort_order)
}

///|
impl IFileInfo with fn set_symbolic_icon(self, icon) -> Unit {
  self.as_file_info().set_symbolic_icon(icon)
}

///|
impl IFileInfo with fn set_symlink_target(self, symlink_target) -> Unit {
  self.as_file_info().set_symlink_target(symlink_target)
}

///|
impl IFileInfo with fn unset_attribute_mask(self) -> Unit {
  self.as_file_info().unset_attribute_mask()
}

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

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