use lief_ffi as ffi;
use crate::common::FromFFI;
use crate::{Error, to_result, to_slice};
use std::fmt;
use std::marker::PhantomData;
pub struct Stub<'a> {
ptr: cxx::UniquePtr<ffi::MachO_Stub>,
_owner: PhantomData<&'a ffi::MachO_Binary>,
}
impl Stub<'_> {
pub fn address(&self) -> u64 {
self.ptr.address()
}
pub fn raw(&self) -> &[u8] {
to_slice!(self.ptr.raw());
}
pub fn target(&self) -> Result<u64, Error> {
to_result!(ffi::MachO_Stub::target, self);
}
}
impl fmt::Debug for Stub<'_> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("Stub")
.field("address", &self.address())
.finish()
}
}
impl FromFFI<ffi::MachO_Stub> for Stub<'_> {
fn from_ffi(stub: cxx::UniquePtr<ffi::MachO_Stub>) -> Self {
Self {
ptr: stub,
_owner: PhantomData,
}
}
}