use std::{mem::MaybeUninit, os::raw::c_char};
#[repr(u8)]
pub(super) enum SetClipboardResult {
#[allow(dead_code)]
Locked = 0,
#[allow(dead_code)]
GenericFailure = 1,
#[allow(dead_code)]
Ok = 2,
}
#[repr(u8)]
pub(super) enum ClipperTag {
#[allow(dead_code)]
Empty = 0,
#[allow(dead_code)]
Text = 1,
#[allow(dead_code)]
Image = 2,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub(super) struct ClipperImage {
pub(super) rgba: *mut u8,
pub(super) width: u32,
pub(super) height: u32,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub(super) struct ClipperText {
pub(super) text: *mut c_char,
pub(super) length: usize,
}
#[repr(C)]
pub(super) union ClipperData {
pub(super) text: ClipperText,
pub(super) image: ClipperImage,
}
#[repr(C)]
pub(super) struct TaggedClipperData {
pub(super) tag: ClipperTag,
pub(super) data: MaybeUninit<ClipperData>,
}
#[link(name = "clippers_wrapper", kind = "static")]
extern "C" {
pub(super) fn clipper_get_tagged_data() -> TaggedClipperData;
pub(super) fn clipper_set_tagged_data(data: TaggedClipperData) -> SetClipboardResult;
pub(super) fn clipper_free_tagged_data(data: TaggedClipperData);
}