use crate::arch::lldb::Register;
use crate::target::Target;
pub struct CallbackToken<'a>(pub(crate) core::marker::PhantomData<&'a *mut ()>);
pub struct Callback<'a> {
pub(crate) cb: &'a mut dyn FnMut(Option<Register<'_>>),
pub(crate) token: CallbackToken<'a>,
}
impl<'a> Callback<'a> {
#[inline(always)]
pub fn done(self) -> CallbackToken<'a> {
(self.cb)(None);
self.token
}
#[inline(always)]
pub fn write(self, reg: Register<'_>) -> CallbackToken<'a> {
(self.cb)(Some(reg));
self.token
}
}
pub trait LldbRegisterInfoOverride: Target {
fn lldb_register_info<'a>(
&mut self,
reg_id: usize,
reg_info: Callback<'a>,
) -> Result<CallbackToken<'a>, Self::Error>;
}
define_ext!(LldbRegisterInfoOverrideOps, LldbRegisterInfoOverride);