use super::{Address, ObjectReference};
#[repr(transparent)]
#[derive(Clone, Copy)]
pub struct NullableObjectReference(usize);
impl From<NullableObjectReference> for Option<ObjectReference> {
fn from(value: NullableObjectReference) -> Self {
ObjectReference::from_raw_address(unsafe { Address::from_usize(value.0) })
}
}
impl From<Option<ObjectReference>> for NullableObjectReference {
fn from(value: Option<ObjectReference>) -> Self {
let encoded = value
.map(|obj| obj.to_raw_address().as_usize())
.unwrap_or(0);
Self(encoded)
}
}
impl std::fmt::Display for NullableObjectReference {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{:#x}", self.0)
}
}
impl std::fmt::Debug for NullableObjectReference {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
std::fmt::Display::fmt(self, f)
}
}