pub struct BufferSerializer<T> { /* private fields */ }
Expand description

Wraps a byte buffer and equips it with Serializer.

Common uses include archiving in #![no_std] environments and archiving small objects without allocating.

Examples

use rkyv::{
    archived_value,
    ser::{Serializer, serializers::BufferSerializer},
    AlignedBytes,
    AlignedVec,
    Archive,
    Archived,
    Serialize,
};

#[derive(Archive, Serialize)]
enum Event {
    Spawn,
    Speak(String),
    Die,
}

let mut serializer = BufferSerializer::new(AlignedBytes([0u8; 256]));
let pos = serializer.serialize_value(&Event::Speak("Help me!".to_string()))
    .expect("failed to archive event");
let buf = serializer.into_inner();
let archived = unsafe { archived_value::<Event>(buf.as_ref(), pos) };
if let Archived::<Event>::Speak(message) = archived {
    assert_eq!(message.as_str(), "Help me!");
} else {
    panic!("archived event was of the wrong type");
}

Implementations§

source§

impl<T> BufferSerializer<T>

source

pub fn new(inner: T) -> Self

Creates a new archive buffer from a byte buffer.

source

pub fn with_pos(inner: T, pos: usize) -> Self

Creates a new archive buffer from a byte buffer. The buffer will start writing at the given position, but the buffer must contain all bytes (otherwise the alignments of types may not be correct).

source

pub fn into_inner(self) -> T

Consumes the serializer and returns the underlying type.

Trait Implementations§

source§

impl<T: Debug> Debug for BufferSerializer<T>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: Default> Default for BufferSerializer<T>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<T> Fallible for BufferSerializer<T>

§

type Error = BufferSerializerError

The error produced by any failing methods.
source§

impl<T: AsMut<[u8]>> Serializer for BufferSerializer<T>

source§

fn pos(&self) -> usize

Returns the current position of the serializer.
source§

fn write(&mut self, bytes: &[u8]) -> Result<(), Self::Error>

Attempts to write the given bytes to the serializer.
source§

fn pad(&mut self, padding: usize) -> Result<(), Self::Error>

Advances the given number of bytes as padding.
source§

fn align(&mut self, align: usize) -> Result<usize, Self::Error>

Aligns the position of the serializer to the given alignment.
source§

fn align_for<T>(&mut self) -> Result<usize, Self::Error>

Aligns the position of the serializer to be suitable to write the given type.
source§

unsafe fn resolve_aligned<T: Archive + ?Sized>( &mut self, value: &T, resolver: T::Resolver ) -> Result<usize, Self::Error>

Resolves the given value with its resolver and writes the archived type. Read more
source§

fn serialize_value<T: Serialize<Self>>( &mut self, value: &T ) -> Result<usize, Self::Error>

Archives the given object and returns the position it was archived at.
source§

unsafe fn resolve_unsized_aligned<T: ArchiveUnsized + ?Sized>( &mut self, value: &T, to: usize, metadata_resolver: T::MetadataResolver ) -> Result<usize, Self::Error>

Resolves the given reference with its resolver and writes the archived reference. Read more
source§

fn serialize_unsized_value<T: SerializeUnsized<Self> + ?Sized>( &mut self, value: &T ) -> Result<usize, Self::Error>

Archives a reference to the given object and returns the position it was archived at.

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for BufferSerializer<T>where T: RefUnwindSafe,

§

impl<T> Send for BufferSerializer<T>where T: Send,

§

impl<T> Sync for BufferSerializer<T>where T: Sync,

§

impl<T> Unpin for BufferSerializer<T>where T: Unpin,

§

impl<T> UnwindSafe for BufferSerializer<T>where T: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> ArchivePointee for T

§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
source§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<F, W, T, D> Deserialize<With<T, W>, D> for Fwhere W: DeserializeWith<F, T, D>, D: Fallible + ?Sized, F: ?Sized,

source§

fn deserialize( &self, deserializer: &mut D ) -> Result<With<T, W>, <D as Fallible>::Error>

Deserializes using the given deserializer
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> LayoutRaw for T

source§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Gets the layout of the type.
source§

impl<T> Pointee for T

§

type Metadata = ()

The type for metadata in pointers and references to Self.
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.