// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IContentProvider {
  fn as_content_provider(Self) -> ContentProvider
  fn content_changed(Self) -> Unit = _
  fn connect_content_changed(Self, (ContentProvider) -> Unit) -> UInt64 = _
}

///|
pub impl IContentProvider for ContentProvider with fn as_content_provider(self) {
  self
}

///|
/// Implementation contract for ContentProvider.attach_clipboard. Self is the retained MoonBit state; the second parameter is the invoked ContentProvider object.
pub(open) trait VContentProviderAttachClipboard {
  fn attach_clipboard(Self, ContentProvider, &IClipboard) -> Unit
}

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

///|
/// Implementation contract for ContentProvider.detach_clipboard. Self is the retained MoonBit state; the second parameter is the invoked ContentProvider object.
pub(open) trait VContentProviderDetachClipboard {
  fn detach_clipboard(Self, ContentProvider, &IClipboard) -> Unit
}

///|
#borrow(mime_type, bytes)
extern "c" fn moonbit_gdk_content_provider_new_for_bytes(
  mime_type : Bytes,
  bytes : Bytes,
) -> ContentProvider = "moonbit_gdk_content_provider_new_for_bytes"

///|
/// [Upstream documentation](https://docs.gtk.org/gdk4/ctor.ContentProvider.new_for_bytes.html).
pub fn ContentProvider::new_for_bytes(
  mime_type : String,
  bytes : Bytes,
) -> ContentProvider {
  moonbit_gdk_content_provider_new_for_bytes(
    @encoding/utf8.encode(mime_type),
    bytes,
  )
}

///|
/// [Upstream documentation](https://docs.gtk.org/gdk4/method.ContentProvider.content_changed.html).
#borrow(self)
pub extern "c" fn ContentProvider::content_changed(self : ContentProvider) = "moonbit_gdk_content_provider_content_changed"

///|
#borrow(instance)
extern "c" fn gdk_content_provider_connect_content_changed(
  instance : ContentProvider,
  function : FuncRef[(ContentProvider, (ContentProvider) -> Unit) -> Unit],
  closure : (ContentProvider) -> Unit,
) -> UInt64 = "moonbit_gdk_content_provider_connect_content_changed"

///|
/// [Upstream documentation](https://docs.gtk.org/gdk4/signal.ContentProvider.content-changed.html).
pub fn ContentProvider::connect_content_changed(
  self : ContentProvider,
  f : (ContentProvider) -> Unit,
) -> UInt64 {
  gdk_content_provider_connect_content_changed(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
impl IContentProvider with fn content_changed(self) -> Unit {
  self.as_content_provider().content_changed()
}

///|
impl IContentProvider with fn connect_content_changed(self, f) -> UInt64 {
  self.as_content_provider().connect_content_changed(f)
}

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

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