Expand description
This crate provides zero-copy deserialization for packet streaming using rkyv
.
Simple usage example:
use rkyv::{Archived, util::AlignedVec, Archive, Serialize, Deserialize, rancor};
use rkyv_codec::{archive_stream, RkyvWriter, VarintLength};
use futures::SinkExt;
#[derive(Archive, Deserialize, Serialize, Debug, PartialEq, Clone)]
#[rkyv(derive(Debug), compare(PartialEq))]
struct Test {
int: u8,
string: String,
option: Option<Vec<i32>>,
}
let value = Test {
int: 42,
string: "hello world".to_string(),
option: Some(vec![1, 2, 3, 4]),
};
// Writing
let writer = Vec::new();
let mut codec = RkyvWriter::<_, VarintLength>::new(writer);
codec.send(&value).await.unwrap();
// Reading
let mut reader = &codec.inner()[..];
let mut buffer = AlignedVec::new(); // Aligned streaming buffer for re-use
let value_archived: &Archived<Test> = archive_stream::<_, Test, VarintLength>(&mut reader, &mut buffer).await.unwrap(); // This returns a reference into the passed buffer
// can deserialize as normal as well (or do *partial* deserialization for blazingly fast speeds!)
let value_deserialized: Test = rkyv::deserialize::<_, rancor::Error>(value_archived).unwrap();
assert_eq!(value, *value_archived);
assert_eq!(value, value_deserialized);
Structs§
- Rkyv
Codec - A futures-compatible Codec using the
asynchronous-codec
library. - Rkyv
Writer - Wraps an
AsyncWrite
and implementsSink
to serializeArchive
objects. - U8Length
- Big-endian fixed-size integer length encoding.
- U16Length
- Big-endian fixed-size integer length encoding.
- U32Length
- Big-endian fixed-size integer length encoding.
- U64Length
- Big-endian fixed-size integer length encoding.
- Varint
Length - Variable-bit length encoding based using unsigned_varint crate, currently can handle lengths up to 2^63
Enums§
Traits§
- Length
Codec - Length encoding trait, allows for different kinds of length encoding
Functions§
- archive_
sink - Rewrites a single buffer representing an Archive to an
AsyncWrite
- archive_
sink_ bytes - Writes a single
Object
from abytes::Bytes
- archive_
stream - Reads a single
&Archived<Object>
from anAsyncRead
using the passed buffer. - archive_
stream_ bytes - Reads a single
&Archived<Object>
from abytes::Bytes
into the passed buffer if validation enabled. - archive_
stream_ ⚠bytes_ unsafe - Reads a single
&Archived<Object>
from abytes::Bytes
into the passed buffer - archive_
stream_ ⚠unsafe - Reads a single
&Archived<Object>
from anAsyncRead
without checking for correct byte formatting