nine 0.5.0

The 9p protocol as a serde format and message types.
Documentation
extern crate nine;

mod util;

use nine::ser::*;
use std::iter::repeat;
use std::{u16, u32};
use util::BlackHoleWriter;

fn ser() -> WriteSerializer<BlackHoleWriter> {
    WriteSerializer::new(BlackHoleWriter)
}

fn expect_err<T: Serialize>(t: &T) -> SerFail {
    let mut serializer = ser();
    t.serialize(&mut serializer).unwrap_err().0.into_inner()
}

#[test]
fn overlong_seq_known() {
    let long_seq = repeat(false)
        .take(u16::MAX as usize + 1)
        .collect::<Vec<bool>>();

    assert!(if let SerFail::SeqTooLong = expect_err(&long_seq) {
        true
    } else {
        false
    });
}

#[test]
fn max_seq() {
    let long_seq = repeat(false).take(u16::MAX as usize).collect::<Vec<bool>>();
    let mut serializer = ser();

    long_seq.serialize(&mut serializer).unwrap();
}

#[test]
fn overlong_str() {
    let long_string = "x".repeat(u16::MAX as usize + 1);

    assert!(if let SerFail::StringTooLong = expect_err(&long_string) {
        true
    } else {
        false
    })
}

#[test]
fn max_str() {
    let length = u16::MAX as u32;
    let string = "x".repeat(length as usize);
    let mut serializer = ser();

    assert_eq!(length + 2, string.serialize(&mut serializer).unwrap())
}

#[test]
#[ignore]
fn overlong_bytes() {
    let bytes = vec![1u8; u32::MAX as usize];
    let mut serializer = ser();

    assert!(
        if let SerFail::BytesTooLong = nine::common::serialize_bytes(&bytes, &mut serializer)
            .unwrap_err()
            .0
            .into_inner()
        {
            true
        } else {
            false
        }
    )
}

#[test]
#[ignore]
fn max_bytes() {
    let bytes = vec![1u8; u32::MAX as usize - 8];
    let mut serializer = ser();

    nine::common::serialize_bytes(&bytes, &mut serializer).unwrap();
}