use std::io::{Read, Write};
use crate::types::encoding::*;
impl BinaryEncoder<bool> for bool {
fn byte_len(&self) -> usize {
1
}
fn encode<S: Write>(&self, stream: &mut S) -> EncodingResult<usize> {
write_u8(stream, if *self { 1 } else { 0 })
}
fn decode<S: Read>(stream: &mut S, _: &DecodingOptions) -> EncodingResult<Self> {
Ok(read_u8(stream)? == 1)
}
}
impl BinaryEncoder<i8> for i8 {
fn byte_len(&self) -> usize {
1
}
fn encode<S: Write>(&self, stream: &mut S) -> EncodingResult<usize> {
write_u8(stream, *self as u8)
}
fn decode<S: Read>(stream: &mut S, _: &DecodingOptions) -> EncodingResult<Self> {
Ok(read_u8(stream)? as i8)
}
}
impl BinaryEncoder<u8> for u8 {
fn byte_len(&self) -> usize {
1
}
fn encode<S: Write>(&self, stream: &mut S) -> EncodingResult<usize> {
write_u8(stream, *self)
}
fn decode<S: Read>(stream: &mut S, _: &DecodingOptions) -> EncodingResult<Self> {
read_u8(stream)
}
}
impl BinaryEncoder<i16> for i16 {
fn byte_len(&self) -> usize {
2
}
fn encode<S: Write>(&self, stream: &mut S) -> EncodingResult<usize> {
write_i16(stream, *self)
}
fn decode<S: Read>(stream: &mut S, _: &DecodingOptions) -> EncodingResult<Self> {
read_i16(stream)
}
}
impl BinaryEncoder<u16> for u16 {
fn byte_len(&self) -> usize {
2
}
fn encode<S: Write>(&self, stream: &mut S) -> EncodingResult<usize> {
write_u16(stream, *self)
}
fn decode<S: Read>(stream: &mut S, _: &DecodingOptions) -> EncodingResult<Self> {
read_u16(stream)
}
}
impl BinaryEncoder<i32> for i32 {
fn byte_len(&self) -> usize {
4
}
fn encode<S: Write>(&self, stream: &mut S) -> EncodingResult<usize> {
write_i32(stream, *self)
}
fn decode<S: Read>(stream: &mut S, _: &DecodingOptions) -> EncodingResult<Self> {
read_i32(stream)
}
}
impl BinaryEncoder<u32> for u32 {
fn byte_len(&self) -> usize {
4
}
fn encode<S: Write>(&self, stream: &mut S) -> EncodingResult<usize> {
write_u32(stream, *self)
}
fn decode<S: Read>(stream: &mut S, _: &DecodingOptions) -> EncodingResult<Self> {
read_u32(stream)
}
}
impl BinaryEncoder<i64> for i64 {
fn byte_len(&self) -> usize {
8
}
fn encode<S: Write>(&self, stream: &mut S) -> EncodingResult<usize> {
write_i64(stream, *self)
}
fn decode<S: Read>(stream: &mut S, _: &DecodingOptions) -> EncodingResult<Self> {
read_i64(stream)
}
}
impl BinaryEncoder<u64> for u64 {
fn byte_len(&self) -> usize {
8
}
fn encode<S: Write>(&self, stream: &mut S) -> EncodingResult<usize> {
write_u64(stream, *self)
}
fn decode<S: Read>(stream: &mut S, _: &DecodingOptions) -> EncodingResult<Self> {
read_u64(stream)
}
}
impl BinaryEncoder<f32> for f32 {
fn byte_len(&self) -> usize {
4
}
fn encode<S: Write>(&self, stream: &mut S) -> EncodingResult<usize> {
write_f32(stream, *self)
}
fn decode<S: Read>(stream: &mut S, _: &DecodingOptions) -> EncodingResult<Self> {
read_f32(stream)
}
}
impl BinaryEncoder<f64> for f64 {
fn byte_len(&self) -> usize {
8
}
fn encode<S: Write>(&self, stream: &mut S) -> EncodingResult<usize> {
write_f64(stream, *self)
}
fn decode<S: Read>(stream: &mut S, _: &DecodingOptions) -> EncodingResult<Self> {
read_f64(stream)
}
}