use vtable_rs::VPtr;
#[vtable_rs::vtable]
pub trait CCallbackBaseVmt<P> {
fn run(&mut self, pv_param: *mut P);
fn run_call(&mut self, pv_param: *mut P, io_failure: bool, api_call: u64);
fn get_callback_size_bytes(&mut self) -> i32;
fn destructor(&mut self, should_free: bool);
}
#[repr(C)]
pub struct CCallbackBase<P: 'static> {
pub vftable: VPtr<dyn CCallbackBaseVmt<P>, Self>,
pub callback_flags: CallbackFlags,
pub callback_id: i32,
}
#[repr(C)]
pub struct CCallback<T, P: 'static> {
pub base: CCallbackBase<P>,
pub obj: *mut T,
pub func: extern "C" fn(&mut T, *mut P),
}
bitflags::bitflags! {
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct CallbackFlags: u8 {
const REGISTERED = 0x01;
const GAME_SERVER = 0x02;
}
}