#[cfg(feature = "gc")]
mod enabled;
#[cfg(feature = "gc")]
pub use enabled::*;
#[cfg(not(feature = "gc"))]
mod disabled;
#[cfg(not(feature = "gc"))]
pub use disabled::*;
mod noextern;
pub use noextern::NoExtern;
use core::fmt;
use core::ops::Deref;
pub trait GcRef: GcRefImpl {}
impl<T> GcRef for T where T: GcRefImpl {}
pub trait RootedGcRef<T>: RootedGcRefImpl<T> + Deref<Target = T>
where
T: GcRef,
{
}
impl<T, U> RootedGcRef<T> for U
where
T: GcRef,
U: RootedGcRefImpl<T> + Deref<Target = T>,
{
}
pub struct GcHeapOutOfMemory<T> {
inner: T,
}
impl<T> fmt::Debug for GcHeapOutOfMemory<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::Display::fmt(self, f)
}
}
impl<T> fmt::Display for GcHeapOutOfMemory<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "GC heap out of memory")
}
}
#[cfg(feature = "std")]
impl<T> std::error::Error for GcHeapOutOfMemory<T> {}
impl<T> GcHeapOutOfMemory<T> {
pub(crate) fn new(inner: T) -> Self {
Self { inner }
}
pub fn into_inner(self) -> T {
self.inner
}
}