#[macro_export]
macro_rules! ark_web_member_exists {
($s:expr, $f:ident) => {
unsafe {
let s_ptr = $s as *const _ as *const u8;
let f_ptr = &((*$s).$f) as *const _ as *const u8;
let f_size = std::mem::size_of_val(&((*$s).$f));
let offset = f_ptr as usize - s_ptr as usize;
let struct_size = *(s_ptr as *const usize);
(offset + f_size <= struct_size)
}
};
}
#[macro_export]
macro_rules! ark_web_member_missing {
($s:expr, $f:ident) => {
(!crate::ark_web_member_exists!($s, $f) || unsafe { !((*$s).$f).is_some() })
};
}