byte_array 0.1.0

A library that supports Java-like series processing with byteorder.
Documentation
/* ------------------------------------------------------------
    ByteArray
    Project.Github: "https://github.com/kerryeon/bytearray"
---------------------------------------------------------------
    Author:
        Name: "kerryeon"
        Email: "besqer996@gnu.ac.kr"
        Github: "https://github.com/kerryeon"
    Generated:
        Date: "3/8/2019"
------------------------------------------------------------ */

use byteorder::{
    BigEndian,
    ByteOrder,
};
use crate::{
    BinaryBuilder,
    ByteArray,
};
use std::mem::size_of;

macro_rules! generate {
($type: ident with default: $default: expr,
    endian: $endian: ident, read: $read: ident, write: $write: ident) => {

impl BinaryBuilder for $type {
    fn new() -> Self {
        $default
    }
    fn from_raw(ba: &mut ByteArray) -> Self {
        let now = ba.now();
        ba.seek_next(size_of::<Self>());
        $endian::$read(&ba.as_vec()[now..])
    }
    fn to_raw(&self, ba: &mut ByteArray) {
        let len = ba.len();
        let vec = ba.as_vec();
        // Alloc
        for _ in 0..size_of::<Self>() {
            vec.push(0);
        }
        $endian::$write(&mut vec[len..], *self);
    }
}

};}

generate!(u16 with default: 0 , endian: BigEndian, read: read_u16, write: write_u16);
generate!(u32 with default: 0 , endian: BigEndian, read: read_u32, write: write_u32);
generate!(u64 with default: 0 , endian: BigEndian, read: read_u64, write: write_u64);

generate!(i16 with default: 0 , endian: BigEndian, read: read_i16, write: write_i16);
generate!(i32 with default: 0 , endian: BigEndian, read: read_i32, write: write_i32);
generate!(i64 with default: 0 , endian: BigEndian, read: read_i64, write: write_i64);

generate!(f32 with default: 0., endian: BigEndian, read: read_f32, write: write_f32);
generate!(f64 with default: 0., endian: BigEndian, read: read_f64, write: write_f64);