fit 0.5.0

A small crate used for reading and decoding FIT files generated by sports devices.
Documentation
use std::io::{Read, Seek, SeekFrom};

#[derive(Copy, Clone, PartialEq)]
pub enum Endianness {
    Little,
    Big,
}

pub fn read_u8<R>(map: &mut R) -> u8
where
    R: Read,
{
    let mut buf: [u8; 1] = [0];
    let _ = map.read(&mut buf);
    buf[0]
}
pub fn read_i8<R>(map: &mut R) -> i8
where
    R: Read,
{
    read_u8(map) as i8
}
pub fn read_u16<R>(map: &mut R, endianness: Endianness) -> u16
where
    R: Read,
{
    let arr = arr2(map);
    if endianness == Endianness::Little {
        u16::from_le_bytes(arr)
    } else {
        u16::from_be_bytes(arr)
    }
}
pub fn read_i16<R>(map: &mut R, endianness: Endianness) -> i16
where
    R: Read,
{
    let arr = arr2(map);
    if endianness == Endianness::Little {
        i16::from_le_bytes(arr)
    } else {
        i16::from_be_bytes(arr)
    }
}
pub fn read_u32<R>(map: &mut R, endianness: Endianness) -> u32
where
    R: Read,
{
    let arr = arr4(map);
    if endianness == Endianness::Little {
        u32::from_le_bytes(arr)
    } else {
        u32::from_be_bytes(arr)
    }
}
pub fn read_i32<R>(map: &mut R, endianness: Endianness) -> i32
where
    R: Read,
{
    let arr = arr4(map);
    if endianness == Endianness::Little {
        i32::from_le_bytes(arr)
    } else {
        i32::from_be_bytes(arr)
    }
}
pub fn read_u64<R>(map: &mut R, endianness: Endianness) -> u64
where
    R: Read,
{
    let arr = arr8(map);
    if endianness == Endianness::Little {
        u64::from_le_bytes(arr)
    } else {
        u64::from_be_bytes(arr)
    }
}
pub fn read_i64<R>(map: &mut R, endianness: Endianness) -> i64
where
    R: Read,
{
    let arr = arr8(map);
    if endianness == Endianness::Little {
        i64::from_le_bytes(arr)
    } else {
        i64::from_be_bytes(arr)
    }
}

fn arr2<R>(map: &mut R) -> [u8; 2]
where
    R: Read,
{
    let mut buf: [u8; 2] = [0; 2];
    let _ = map.read(&mut buf);
    buf
}

pub fn arr4<R>(map: &mut R) -> [u8; 4]
where
    R: Read,
{
    let mut buf: [u8; 4] = [0; 4];
    let _ = map.read(&mut buf);
    buf
}

fn arr8<R>(map: &mut R) -> [u8; 8]
where
    R: Read,
{
    let mut buf: [u8; 8] = [0; 8];
    let _ = map.read(&mut buf);
    buf
}

pub fn skip_bytes<R>(map: &mut R, s: u8)
where
    R: Seek,
{
    map.seek(SeekFrom::Current(s.into())).unwrap();
}