use core::fmt;
pub struct GcHeapOutOfMemory<T> {
inner: T,
bytes_needed: u64,
}
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: no capacity for allocation of {} bytes",
self.bytes_needed
)
}
}
impl<T> std::error::Error for GcHeapOutOfMemory<T> {}
impl<T> GcHeapOutOfMemory<T> {
pub(crate) fn new(inner: T, bytes_needed: u64) -> Self {
Self {
inner,
bytes_needed,
}
}
pub fn bytes_needed(&self) -> u64 {
self.bytes_needed
}
pub fn into_inner(self) -> T {
self.inner
}
pub fn take_inner(self) -> (T, GcHeapOutOfMemory<()>) {
(self.inner, GcHeapOutOfMemory::new((), self.bytes_needed))
}
}