1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
use crate::{ boxed::{ArchivedBox, BoxResolver}, with::{ArchiveWith, Boxed, Inline, SerializeWith}, Archive, ArchiveUnsized, Fallible, Serialize, SerializeUnsized, }; impl<F: Archive> ArchiveWith<&F> for Inline { type Archived = F::Archived; type Resolver = F::Resolver; #[inline] unsafe fn resolve_with( field: &&F, pos: usize, resolver: Self::Resolver, out: *mut Self::Archived, ) { field.resolve(pos, resolver, out); } } impl<F: Serialize<S>, S: Fallible + ?Sized> SerializeWith<&F, S> for Inline { #[inline] fn serialize_with(field: &&F, serializer: &mut S) -> Result<Self::Resolver, S::Error> { field.serialize(serializer) } } impl<F: ArchiveUnsized + ?Sized> ArchiveWith<&F> for Boxed { type Archived = ArchivedBox<F::Archived>; type Resolver = BoxResolver<F::MetadataResolver>; #[inline] unsafe fn resolve_with( field: &&F, pos: usize, resolver: Self::Resolver, out: *mut Self::Archived, ) { ArchivedBox::resolve_from_ref(*field, pos, resolver, out); } } impl<F: SerializeUnsized<S> + ?Sized, S: Fallible + ?Sized> SerializeWith<&F, S> for Boxed { #[inline] fn serialize_with(field: &&F, serializer: &mut S) -> Result<Self::Resolver, S::Error> { ArchivedBox::serialize_from_ref(*field, serializer) } }