use core::hash::Hash;
use crate::prelude::*;
use ser::*;
#[cfg(not(feature = "std"))]
use alloc::{boxed::Box, vec::Vec};
impl<T: TypeHash> TypeHash for [T] {
fn type_hash(hasher: &mut impl core::hash::Hasher) {
"[]".hash(hasher);
T::type_hash(hasher);
}
}
impl<T: TypeHash> TypeHash for &[T] {
fn type_hash(hasher: &mut impl core::hash::Hasher) {
"&[]".hash(hasher);
T::type_hash(hasher);
}
}
unsafe impl<T> CopyType for &[T] {
type Copy = Deep;
}
impl<T: SerInner> SerInner for &[T]
where
Box<[T]>: SerInner,
{
type SerType = Box<[T::SerType]>;
const IS_ZERO_COPY: bool = false;
unsafe fn _ser_inner(&self, backend: &mut impl WriteWithNames) -> ser::Result<()> {
let fake = unsafe { Vec::from_raw_parts(self.as_ptr() as *mut T, self.len(), self.len()) }
.into_boxed_slice();
unsafe { ser::SerInner::_ser_inner(&fake, backend) }?;
core::mem::forget(fake);
Ok(())
}
}