rkyv_codec

docs.rs crates.io

Simple async codec for rkyv. Reuses streaming buffer for maximum speed!

This crate provides a makeshift adaptor for streaming &Archived<Object>s from an AsyncRead using a reusable external buffer, as well as a futures::Sink implementation to serialize Objects to an AsyncWrite. It uses multiformat's unsigned_varint for variable-length length encoding.

Examples

This crate has two examples: chatclient & chatserver. Run both of them at the same time to see a proof-of-concept Archive tcp stream in action.

To run:

cargo run --example chat_client

cargo run --eaxmple chat_server

Simple usage example: ```rust

[derive(Archive, Deserialize, Serialize, Debug, PartialEq, Clone)]

[archive_attr(derive(CheckBytes, Debug))] // Checkbytes is required

struct Test { int: u8, string: String, option: Option>, } 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::new(writer); codec.send(value.clone()).await.unwrap();

// Reading let mut reader = &codec.inner()[..]; let mut buffer = AlignedVec::new(); // Aligned streaming buffer for re-use let data: &Archived = stream::<_, Test>(&mut reader, &mut buffer).await.unwrap(); // This returns a reference into the passed buffer let value_received: Test = data.deserialize(&mut Infallible).unwrap();

asserteq!(value, valuereceived); ```