serde-xdr 0.6.0

XDR serialization and deserialization for Serde
Documentation
use {
    super::super::{
        super::{from_reader, to_bytes},
        fixed_length,
    },
    std::io::Cursor,
};

#[derive(Deserialize, Serialize)]
struct FourBytes {
    #[serde(with = "fixed_length")]
    data: [u8; 4],
}

#[derive(Deserialize, Serialize)]
struct FiveBytes {
    #[serde(with = "fixed_length")]
    data: [u8; 5],
}

#[derive(Deserialize, Serialize)]
struct SixBytes {
    #[serde(with = "fixed_length")]
    data: [u8; 6],
}

#[derive(Deserialize, Serialize)]
struct SevenBytes {
    #[serde(with = "fixed_length")]
    data: [u8; 7],
}

#[test]
fn serialize_bytes_without_padding() {
    let data = [0, 1, 2, 4];
    let bytes = FourBytes { data };

    let serialized_bytes = to_bytes(&bytes).unwrap();

    assert_eq!(serialized_bytes, vec![0, 1, 2, 4]);
}

#[test]
fn serialize_bytes_with_3_byte_padding() {
    let data = [0, 1, 2, 4, 8];
    let bytes = FiveBytes { data };

    let serialized_bytes = to_bytes(&bytes).unwrap();

    assert_eq!(serialized_bytes, vec![0, 1, 2, 4, 8, 0, 0, 0]);
}

#[test]
fn serialize_bytes_with_2_byte_padding() {
    let data = [0, 1, 2, 4, 8, 16];
    let bytes = SixBytes { data };

    let serialized_bytes = to_bytes(&bytes).unwrap();

    assert_eq!(serialized_bytes, vec![0, 1, 2, 4, 8, 16, 0, 0]);
}

#[test]
fn serialize_bytes_with_1_byte_padding() {
    let data = [0, 1, 2, 4, 8, 16, 32];
    let bytes = SevenBytes { data };

    let serialized_bytes = to_bytes(&bytes).unwrap();

    assert_eq!(serialized_bytes, vec![0, 1, 2, 4, 8, 16, 32, 0]);
}

#[test]
fn deserialize_bytes_without_padding() {
    let serialized_bytes = [0, 1, 2, 4];
    let mut cursor = Cursor::new(serialized_bytes);

    let bytes: FourBytes = from_reader(&mut cursor).unwrap();

    assert_eq!(bytes.data, [0, 1, 2, 4]);
}

#[test]
fn deserialize_bytes_with_3_byte_padding() {
    let serialized_bytes = [0, 1, 2, 4, 8, 0, 0, 0];
    let mut cursor = Cursor::new(serialized_bytes);

    let bytes: FiveBytes = from_reader(&mut cursor).unwrap();

    assert_eq!(bytes.data, [0, 1, 2, 4, 8]);
}

#[test]
fn deserialize_bytes_with_2_byte_padding() {
    let serialized_bytes = [0, 1, 2, 4, 8, 16, 0, 0];
    let mut cursor = Cursor::new(serialized_bytes);

    let bytes: SixBytes = from_reader(&mut cursor).unwrap();

    assert_eq!(bytes.data, [0, 1, 2, 4, 8, 16]);
}

#[test]
fn deserialize_bytes_with_1_byte_padding() {
    let serialized_bytes = [0, 1, 2, 4, 8, 16, 32, 0];
    let mut cursor = Cursor::new(serialized_bytes);

    let bytes: SevenBytes = from_reader(&mut cursor).unwrap();

    assert_eq!(bytes.data, [0, 1, 2, 4, 8, 16, 32]);
}