clippers 0.1.2

Cross-platform clipboard management library
Documentation
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);
}