data-rw 1.6.4

io buffer write reader.
Documentation
use anyhow::Result;
use data_rw::{Data, DataReader};

#[test]
fn test_resize() -> Result<()> {
    let mut data = Data::with_capacity(128);
    data.write_fixed(include_str!("./test.txt"));

    let mut rd = DataReader::from(&data);
    let r = rd.read_fixed_str()?;
    assert_eq!(r, include_str!("./test.txt"));
    Ok(())
}

#[test]
fn test_write() -> Result<()> {
    let mut data = Data::new();
    data.write_buf(&[1, 2, 3, 4]);
    assert_eq!(&data[..], &[1, 2, 3, 4]);

    data.write_buf_at(1, &[1, 1, 1])?;
    assert_eq!(&data[..], &[1, 1, 1, 1]);

    data.write_fixed(&1u8);
    assert_eq!(&data[..], &[1, 1, 1, 1, 1]);

    data.write_fixed(&1i8);
    assert_eq!(&data[..], &[1, 1, 1, 1, 1, 1]);

    data.write_fixed(&1u16);
    assert_eq!(&data[..], &[1, 1, 1, 1, 1, 1, 1, 0]);

    data.write_fixed_at(1, &1i32)?;
    assert_eq!(&data[..], &[1, 1, 0, 0, 0, 1, 1, 0]);

    let mut data = Data::new();
    data.write_var_integer(&1u32);
    assert_eq!(&data[..], &[1]);

    data.write_var_integer(&1i32);
    assert_eq!(&data[..], &[1, 2]);

    data.write_fixed(&1f32);

    let mut data = Data::new();
    data.write_var_integer(&"123123");
    assert_eq!(&data[..], &[6, 49, 50, 51, 49, 50, 51]);

    let mut data = Data::new();
    data.write_var_integer(&"123123".to_string());
    assert_eq!(&data[..], &[6, 49, 50, 51, 49, 50, 51]);

    let mut data = Data::new();
    data.write_fixed(&1u8);
    data.write_fixed(&2i16);
    data.write_fixed(&3i32);
    data.write_fixed(&4i64);
    data.write_fixed(&5f32);
    data.write_fixed(&6f64);

    let mut rd = DataReader::from(&data[..]);
    assert_eq!(1, rd.read_fixed::<u8>()?);
    assert_eq!(2, rd.read_fixed::<i16>()?);
    assert_eq!(3, rd.read_fixed::<i32>()?);
    assert_eq!(4, rd.read_fixed::<i64>()?);
    assert_eq!(5f32, rd.read_fixed::<f32>()?);
    assert_eq!(6f64, rd.read_fixed::<f64>()?);

    Ok(())
}

#[test]
fn test_read() -> Result<()> {
    let x = [1, 2, 3, 4, 5, 6];
    let mut data = DataReader::from(&x[..]);
    let mut read = vec![0; 2];
    data.read_buff(&mut read)?;
    assert_eq!(read, [1, 2]);

    let mut data = Data::new();
    data.write_var_integer(&123u32);
    data.write_var_integer(&321i32);
    data.write_var_integer(&123u64);
    data.write_var_integer(&321i64);

    let mut data = DataReader::from(&data[..]);
    let x: u32 = data.read_var_integer()?;
    assert_eq!(123, x);
    let x: i32 = data.read_var_integer()?;
    assert_eq!(321, x);
    let x: u64 = data.read_var_integer()?;
    assert_eq!(123, x);
    let x: i64 = data.read_var_integer()?;
    assert_eq!(321, x);

    let mut data = Data::new();
    data.write_var_integer(&"hello world");
    let mut data = DataReader::from(&data[..]);
    let msg = data.read_var_str()?;
    assert_eq!(msg, "hello world");

    let mut data = Data::new();
    data.write_fixed(&"hello world");
    let mut data = DataReader::from(&data[..]);
    let msg = data.read_fixed_str()?;
    assert_eq!(msg, "hello world");

    let x = [1, 2, 3, 4, 5, 6];
    let mut data = Data::new();
    data.write_fixed(&x[..]);
    let mut data = DataReader::from(&data[..]);
    let msg = data.read_fixed_buf()?;
    assert_eq!(msg, x);

    let x = [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6];
    let mut data = Data::new();
    data.write_fixed(&x[..]);
    data.write_fixed_at(2, "hello world")?;
    let mut data = DataReader::from(&data[2..]);
    let msg = data.read_fixed_str()?;
    assert_eq!(msg, "hello world");

    let mut data = Data::new();
    data.write_fixed(&x[..]);
    data.write_fixed_at(2, &[1, 2, 3, 4, 5, 6][..])?;
    let mut data = DataReader::from(&data[2..]);
    let msg = data.read_fixed_buf()?;
    assert_eq!(msg, [1, 2, 3, 4, 5, 6]);

    Ok(())
}