luabins 0.1.0

A pure Rust implementation of the luabins format.
Documentation
use std::convert::TryInto;

fn read<P: AsRef<std::path::Path>>(path: P) -> std::io::Result<Vec<u8>> {
    let path = std::path::Path::new(env!("CARGO_MANIFEST_DIR"))
        .join("tests")
        .join(path);
    std::fs::read(path)
}

#[test]
fn basic1() {
    let data = read("basic1.bin").unwrap();
    let (rest, result) = luabins::load(&data).unwrap();
    assert!(rest.is_empty());
    assert_eq!(
        result,
        vec![
            luabins::Value::Number(1f64.into()),
            luabins::Value::String("two".into()),
            luabins::Value::Table(vec![
                (
                    luabins::Key::Number(1f64.try_into().unwrap()),
                    luabins::Value::String("three".into())
                ),
                (
                    luabins::Key::Number(2f64.try_into().unwrap()),
                    luabins::Value::Number(4f64.into())
                )
            ])
        ]
    );
}

#[test]
fn round_trips() {
    let paths = (1..=5).map(|index| format!("basic{}.bin", index));
    for path in paths {
        let data = read(path).unwrap();
        let (rest, result) = luabins::load(&data).unwrap();
        assert!(rest.is_empty());
        let serialized = luabins::save(&result);
        assert_eq!(data, serialized);
    }
}