use crate::{
buffer::{
self,
bytes::bounded,
storage::{
provided,
provided::{Account, Unique},
},
},
mem::rc,
};
unsafe impl buffer::raw::Consume for Unique<'_> {
fn consume<const MAX: u32>(prefix: buffer::raw::Consumed<'_, '_, Self, MAX>) {
prefix.consume::<&mut [u8]>();
}
}
unsafe impl buffer::raw::Mutable for Unique<'_> {}
unsafe impl<T: buffer::raw::Source> buffer::raw::Source for provided::Prefix<'_, '_, T> {}
unsafe impl buffer::raw::Mutable for provided::Prefix<'_, '_> {}
unsafe impl buffer::raw::Split for provided::Prefix<'_, '_> {}
unsafe impl<T: buffer::raw::Source> buffer::raw::Source
for bounded::Value<provided::Prefix<'_, '_, T>>
{
}
unsafe impl<'a, 'd> buffer::raw::Freeze for provided::Prefix<'a, 'd> {
type Output = provided::Prefix<'a, 'd, &'a [u8]>;
fn freeze(self) -> Self::Output {
self.into()
}
}
unsafe impl<'a, 'd> buffer::raw::Freeze for bounded::Value<provided::Prefix<'a, 'd>> {
type Output = bounded::Value<provided::Prefix<'a, 'd, &'a [u8]>>;
fn freeze(self) -> Self::Output {
self.into()
}
}
unsafe impl buffer::raw::Mutable for bounded::Value<Unique<'_>> {}
unsafe impl buffer::raw::Mutable for bounded::Value<provided::Prefix<'_, '_>> {}
unsafe impl buffer::raw::Split for bounded::Value<provided::Prefix<'_, '_>> {}
unsafe impl buffer::raw::Store for provided::Prefix<'_, '_> {
fn empty() -> Option<Self> {
None
}
fn restrict(slice: buffer::raw::Slice<'_, '_, Self>) {
let slice = unsafe { slice.map(|source| &mut source.bytes) };
<&mut [u8] as buffer::raw::Store>::project(slice);
}
}
unsafe impl<'d> buffer::raw::Retain for Account<'d> {
fn try_retain(&self) -> Result<Self, rc::Error> {
self.try_clone()
}
}
unsafe impl<T, C> buffer::raw::Arenas for provided::Arena<T, C> {
type Roots<'d>
= provided::Root<'d, T, C>
where
Self: 'd;
unsafe fn enter(&mut self) -> (Self::Roots<'_>, impl FnOnce() + '_) {
unsafe { self.enter_scope() }
}
}