bytes_convert 1.0.0

Easily encode and decode bytes to send data over network
Documentation
use bytes::{Buf, BytesMut};

pub trait ToBytes {
    fn to_bytes(&self) -> Vec<u8>;
}

impl ToBytes for u8 {
    fn to_bytes(&self) -> Vec<u8> {
        self.to_be_bytes().to_vec()
    }
}

impl ToBytes for i8 {
    fn to_bytes(&self) -> Vec<u8> {
        self.to_be_bytes().to_vec()
    }
}

impl ToBytes for u16 {
    fn to_bytes(&self) -> Vec<u8> {
        self.to_be_bytes().to_vec()
    }
}

impl ToBytes for i16 {
    fn to_bytes(&self) -> Vec<u8> {
        self.to_be_bytes().to_vec()
    }
}

impl ToBytes for u32 {
    fn to_bytes(&self) -> Vec<u8> {
        self.to_be_bytes().to_vec()
    }
}

impl ToBytes for i32 {
    fn to_bytes(&self) -> Vec<u8> {
        self.to_be_bytes().to_vec()
    }
}

impl ToBytes for u64 {
    fn to_bytes(&self) -> Vec<u8> {
        self.to_be_bytes().to_vec()
    }
}

impl ToBytes for i64 {
    fn to_bytes(&self) -> Vec<u8> {
        self.to_be_bytes().to_vec()
    }
}

impl ToBytes for f32 {
    fn to_bytes(&self) -> Vec<u8> {
        self.to_be_bytes().to_vec()
    }
}

impl ToBytes for f64 {
    fn to_bytes(&self) -> Vec<u8> {
        self.to_be_bytes().to_vec()
    }
}

pub fn to_bytes<T: ToBytes, S: AsRef<[T]>>(values: S) -> Vec<u8> {
    let mut buf = vec![];
    for value in values.as_ref() {
        buf.extend(value.to_bytes());
    }
    buf
}

pub trait FromBytes<T> {
    fn from_bytes(buf: &mut BytesMut) -> T;
}

impl FromBytes<u8> for u8 {
    fn from_bytes(buf: &mut BytesMut) -> u8 {
        buf.get_u8()
    }
}

impl FromBytes<i8> for i8 {
    fn from_bytes(buf: &mut BytesMut) -> i8 {
        buf.get_i8()
    }
}

impl FromBytes<u16> for u16 {
    fn from_bytes(buf: &mut BytesMut) -> u16 {
        buf.get_u16()
    }
}

impl FromBytes<i16> for i16 {
    fn from_bytes(buf: &mut BytesMut) -> i16 {
        buf.get_i16()
    }
}

impl FromBytes<u32> for u32 {
    fn from_bytes(buf: &mut BytesMut) -> u32 {
        buf.get_u32()
    }
}

impl FromBytes<i32> for i32 {
    fn from_bytes(buf: &mut BytesMut) -> i32 {
        buf.get_i32()
    }
}

impl FromBytes<u64> for u64 {
    fn from_bytes(buf: &mut BytesMut) -> u64 {
        buf.get_u64()
    }
}

impl FromBytes<i64> for i64 {
    fn from_bytes(buf: &mut BytesMut) -> i64 {
        buf.get_i64()
    }
}

impl FromBytes<f32> for f32 {
    fn from_bytes(buf: &mut BytesMut) -> f32 {
        buf.get_f32()
    }
}

impl FromBytes<f64> for f64 {
    fn from_bytes(buf: &mut BytesMut) -> f64 {
        buf.get_f64()
    }
}

pub fn from_bytes<T: FromBytes<T>, S: AsRef<[u8]>>(buf: S) -> Vec<T> {
    let mut buf = BytesMut::from(buf.as_ref());

    let mut values: Vec<T> = vec![];
    while !buf.is_empty() {
        let converted = T::from_bytes(&mut buf);
        values.push(converted);
    }
    values
}