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
50
51
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)
}
}