stackstring 0.1.8

A fixed-size string
Documentation
use stackstring::String;

use core::convert::TryInto;
use rkyv::{
    archived_root,
    ser::{serializers::AlignedSerializer, Serializer},
    AlignedVec, Archive, Deserialize, Infallible, Serialize,
};

#[derive(Archive, Deserialize, Serialize, PartialEq, Debug)]
struct S {
    st: String<3>,
    x: u8,
}

fn main() {
    let value = S {
        st: "abf".try_into().unwrap(),
        x: 99,
    };

    let mut serializer = AlignedSerializer::new(AlignedVec::new());
    serializer
        .serialize_value(&value)
        .expect("failed serializing value");

    let buf = serializer.into_inner();
    assert_eq!(buf.len(), 4);

    let archived = unsafe { archived_root::<S>(buf.as_ref()) };

    assert_eq!(archived.st, value.st);

    let deserialized = archived
        .deserialize(&mut Infallible)
        .expect("failed deserializing value");

    assert_eq!(value, deserialized);
}