tsfile-writer 0.1.0

TsFile Writer in Rust
Documentation
use crate::PositionedWrite;
use std::io::Read;

pub fn write_var_u32(num: u32, buffer: &mut dyn PositionedWrite) -> u8 {
    let mut number = num.clone();

    // Now compress them
    let mut position: u8 = 1;

    while (number & 0xFFFFFF80) != 0 {
        buffer.write_all(&[((number & 0x7F) | 0x80) as u8]);
        number = number >> 7;
        position = position + 1;
    }

    buffer.write_all(&[(number & 0x7F) as u8]);

    return position;
}

pub fn size_var_i32(num: i32) -> u8 {
    let mut u_value = num << 1;
    if num < 0 {
        u_value = !u_value;
    }
    return size_var_u32(u_value as u32);
}

pub fn size_var_u32(num: u32) -> u8 {
    let mut position = 1;
    let mut value = num.clone();
    while (value & 0xFFFFFF80) != 0 {
      value = value >> 7;
      position += 1;
    }
    return position;
}

pub fn write_var_i32(num: i32, buffer: &mut dyn PositionedWrite) -> u8 {
    let mut u_value = num << 1;
    if num < 0 {
        u_value = !u_value;
    }
    return write_var_u32(u_value as u32, buffer);
}

fn read_byte(buffer: &mut dyn Read) -> u8 {
    let mut read_buffer: [u8; 1] = [0];
    buffer.read(&mut read_buffer).expect("Prblem");
    return read_buffer[0];
}

pub fn read_var_u32(buffer: &mut dyn Read) -> u32 {
    let mut value: u32 = 0;
    let mut i: u8 = 0;
    let mut b = read_byte(buffer);
    while b != u8::MAX && (b & 0x80) != 0 {
        value = value | (((b & 0x7F) as u32) << i);
        i = i + 7;
        b = read_byte(buffer);
    }
    return value | ((b as u32) << i);
}