snowbinary 0.1.0

A system for writing and reading binary files using its own format.
Documentation
use crate::error::{SnowBinError, SnowBinErrorTypes};
use std::{fs::File, io::Write};

pub fn error(result: std::io::Result<()>) -> Result<(), SnowBinError> {
    match result {
        Ok(r) => Ok(r),
        Err(_) => Err(SnowBinError::new(SnowBinErrorTypes::IOWriteError)),
    }
}

pub fn write_header(file: &mut File, header: &str, header_len: u64) -> Result<(), SnowBinError> {
    if header.len() as u64 > header_len {
        return Err(SnowBinError::new(SnowBinErrorTypes::HeaderTooLong));
    }

    let null_buffer = vec![0_u8; (header_len - header.len() as u64) as usize];
    let buffer = &[header.as_bytes(), &null_buffer].concat();

    error(file.by_ref().write_all(buffer))
}

pub fn write_bytes(file: &mut File, data: &[u8]) -> Result<(), SnowBinError> {
    error(file.by_ref().write_all(data))
}

pub fn write_u8(file: &mut File, data: u8) -> Result<(), SnowBinError> {
    let buffer = &(data).to_be_bytes();
    error(file.by_ref().write_all(buffer))
}

pub fn write_u16(file: &mut File, data: u16) -> Result<(), SnowBinError> {
    let buffer = &(data).to_be_bytes();
    error(file.by_ref().write_all(buffer))
}

pub fn write_u32(file: &mut File, data: u32) -> Result<(), SnowBinError> {
    let buffer = &(data).to_be_bytes();
    error(file.by_ref().write_all(buffer))
}

pub fn write_u64(file: &mut File, data: u64) -> Result<(), SnowBinError> {
    let buffer = &(data).to_be_bytes();
    error(file.by_ref().write_all(buffer))
}

/*pub fn write_u128(file: &mut File, data: u128) -> Result<(), SnowBinError> {
    let buffer = &(data).to_be_bytes();
    error(file.by_ref().write_all(buffer))
}*/

pub fn write_bool(file: &mut File, data: bool) -> Result<(), SnowBinError> {
    let buffer = &(data as u8).to_be_bytes();
    error(file.by_ref().write_all(buffer))
}