use abi_stable::type_layout::TypeLayout;
use cglue::prelude::v1::*;
use crate::{error::Result, PluginInnerArcBox};
bitflags::bitflags! {
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[repr(C)]
pub struct FeatureSupport: u8 {
const READ_MOUSE = 0x01;
const WRITE_MOUSE = 0x02;
const READ_KEYBOARD = 0x04;
const WRITE_KEYBOARD = 0x08;
const INTERCEPT_MOUSE = 0x10;
const INTERCEPT_KEYBOARD = 0x20;
const ALL = Self::READ_MOUSE.bits()
| Self::WRITE_MOUSE.bits()
| Self::READ_KEYBOARD.bits()
| Self::WRITE_KEYBOARD.bits()
| Self::INTERCEPT_MOUSE.bits()
| Self::INTERCEPT_KEYBOARD.bits();
}
}
#[repr(C)]
pub struct PluginHeader {
pub features: FeatureSupport,
pub layout: &'static TypeLayout,
#[allow(improper_ctypes_definitions)] pub create: extern "C" fn(&CArc<cglue::trait_group::c_void>, *const std::ffi::c_char) -> Result<PluginInnerArcBox<'static>>,
}