ucpack 0.1.3

Rust implementation of the ucpack serialization format used in the Arduino Alvik
Documentation
use serde::{Deserialize, Serialize};
use ucpack::UcPack;

#[test]
fn test_continuity() {
    let ucpack = UcPack::default();
    let mut buffer = vec![0; 1000];

    #[derive(Serialize)]
    struct TestPayload {
        a: u16,
        b: u8,
        c: f32,
    }
    const PAYLOAD: TestPayload = TestPayload { a: 1, b: 2, c: 1.0 };

    let n = ucpack.serialize_slice(&PAYLOAD, &mut buffer).unwrap();
    let slice_serialized = &buffer[..n];

    let vec_serialized = ucpack.serialize_vec(&PAYLOAD).unwrap();

    assert_eq!(vec_serialized, slice_serialized);
}

#[test]
fn test_serialize_deserialize() {
    #[derive(Serialize, Deserialize, PartialEq, Debug)]
    enum TestEnum {
        Tag1,
        Tag2(u16),
    }

    #[derive(Serialize, Deserialize, PartialEq, Debug)]
    struct TestPayload {
        a: u16,
        b: u8,
        c: f32,
        d: TestEnum,
    }

    const PAYLOAD: TestPayload = TestPayload {
        a: 1,
        b: 2,
        c: 1.0,
        d: TestEnum::Tag2(10),
    };

    let ucpack = UcPack::default();
    let serialized = ucpack.serialize_vec(&PAYLOAD).unwrap();
    let deserialized: TestPayload = ucpack.deserialize_slice(&serialized).unwrap();

    assert_eq!(PAYLOAD, deserialized);
}