nrbf 0.2.2

A parser for the .NET Remoting Binary Format (NRBF).
Documentation
use const_str::concat_bytes;
use nrbf::{RemotingMessage, Value};

#[rustfmt::skip]
const INPUT: &[u8] = concat_bytes!(
  0,
    b"\x01\x00\x00\x00",
    b"\xFF\xFF\xFF\xFF",
    b"\x01\x00\x00\x00",
    b"\x00\x00\x00\x00",
  15,
    b"\x01\x00\x00\x00",
    b"\x02\x00\x00\x00",
    9,
    b"\x43\x00\x00\x00\x00\x00\x00\x00",
    b"\x2a\x00\x00\x00\x00\x00\x00\x00",
  11,
);

#[test]
fn array_single_primitive() {
  let output = RemotingMessage::Value(Value::Array(vec![Value::Int64(67), Value::Int64(42)]));

  assert_eq!(RemotingMessage::parse(INPUT), Ok(output));
}

#[cfg(feature = "serde")]
#[test]
fn array_single_primitive_deserialize() {
  assert_eq!(nrbf::from_slice(INPUT), Ok(vec![67i64, 42i64]));
  assert_eq!(nrbf::from_slice(INPUT), Ok(vec![67i32, 42i32]));

  assert_eq!(
    nrbf::from_slice::<[i64; 1]>(INPUT).unwrap_err().to_string(),
    "invalid length 2, expected 1 element in array"
  );
  assert_eq!(nrbf::from_slice::<[i64; 2]>(INPUT), Ok([67, 42]));
  assert_eq!(
    nrbf::from_slice::<[i64; 3]>(INPUT).unwrap_err().to_string(),
    "invalid length 2, expected an array of length 3"
  );
}