Struct rkyv::with::With [−][src]
#[repr(transparent)]pub struct With<F: ?Sized, W> { /* fields omitted */ }
Expand description
A transparent wrapper for archived fields.
This is used by the #[with(...)]
attribute in the Archive
macro to
create transparent serialization wrappers. Those wrappers leverage ArchiveWith
to change
how the type is archived, serialized, and deserialized.
When a field is serialized, a reference to the field (i.e. &T
) can be cast to a reference to a
With
wrapper and serialized instead (i.e. &With<T, Wrapper>
). This is safe to do because
With
is a transparent wrapper and is shaped exactly the same as the underlying field.
Example
use rkyv::{Archive, with::Inline};
#[derive(Archive)]
struct Example<'a> {
// This will archive as if it were With<&'a i32, Inline>. That will delegate the archival
// to the ArchiveWith implementation of Inline for &T.
#[with(Inline)]
a: &'a i32,
}
Implementations
Unwraps a With
into the underlying field.
Trait Implementations
The resolver for this type. It must contain all the additional information from serializing needed to make the archived type from the normal type. Read more
type Archived = ArchivedBox<[T::Archived]>
type Archived = ArchivedBox<[T::Archived]>
The archived type of a With<F, Self>
.
type Resolver = BoxResolver<MetadataResolver<[T]>>
type Resolver = BoxResolver<MetadataResolver<[T]>>
The resolver of a With<F, Self>
.
impl<F, W, T, D> Deserialize<With<T, W>, D> for F where
F: ?Sized,
W: DeserializeWith<F, T, D>,
D: Fallible + ?Sized,
impl<F, W, T, D> Deserialize<With<T, W>, D> for F where
F: ?Sized,
W: DeserializeWith<F, T, D>,
D: Fallible + ?Sized,
impl<D: Fallible + ?Sized> DeserializeWith<<With<AtomicIsize, Atomic> as Archive>::Archived, AtomicIsize, D> for Atomic
impl<D: Fallible + ?Sized> DeserializeWith<<With<AtomicIsize, Atomic> as Archive>::Archived, AtomicIsize, D> for Atomic
fn deserialize_with(
field: &Archived<With<AtomicIsize, Self>>,
_: &mut D
) -> Result<AtomicIsize, D::Error>
fn deserialize_with(
field: &Archived<With<AtomicIsize, Self>>,
_: &mut D
) -> Result<AtomicIsize, D::Error>
Deserializes the field type F
using the given deserializer.
impl<'a, T, S> SerializeWith<With<&'a [T], RefAsBox>, S> for CopyOptimize where
T: Serialize<S>,
S: Serializer,
impl<'a, T, S> SerializeWith<With<&'a [T], RefAsBox>, S> for CopyOptimize where
T: Serialize<S>,
S: Serializer,
Auto Trait Implementations
impl<F: ?Sized, W> RefUnwindSafe for With<F, W> where
F: RefUnwindSafe,
W: RefUnwindSafe,
impl<F: ?Sized, W> UnwindSafe for With<F, W> where
F: UnwindSafe,
W: UnwindSafe,
Blanket Implementations
type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
Converts some archived metadata to the pointer metadata for itself.
The archived counterpart of this type. Unlike Archive
, it may be unsized. Read more
type MetadataResolver = ()
type MetadataResolver = ()
The resolver for the metadata of this type. Read more
pub unsafe fn resolve_metadata(
&Self,
usize,
<T as ArchiveUnsized>::MetadataResolver,
*mut <<T as ArchiveUnsized>::Archived as ArchivePointee>::ArchivedMetadata
)
pub unsafe fn resolve_metadata(
&Self,
usize,
<T as ArchiveUnsized>::MetadataResolver,
*mut <<T as ArchiveUnsized>::Archived as ArchivePointee>::ArchivedMetadata
)
Creates the archived version of the metadata for this value at the given position and writes it to the given output. Read more
unsafe fn resolve_unsized(
&self,
from: usize,
to: usize,
resolver: Self::MetadataResolver,
out: *mut RelPtr<Self::Archived>
)
unsafe fn resolve_unsized(
&self,
from: usize,
to: usize,
resolver: Self::MetadataResolver,
out: *mut RelPtr<Self::Archived>
)
Resolves a relative pointer to this value with the given from
and to
and writes it to
the given output. Read more
Mutably borrows from an owned value. Read more