vminer-core 0.1.0

Core library for vminer
Documentation
pub trait Endianness {
    fn as_runtime_endian(&self) -> RuntimeEndian;

    #[inline]
    fn is_little_endian(&self) -> bool {
        self.as_runtime_endian() == RuntimeEndian::Little
    }

    #[inline]
    fn read_u16(&self, n: u16) -> u16 {
        match self.as_runtime_endian() {
            RuntimeEndian::Little => u16::from_le(n),
            RuntimeEndian::Big => u16::from_be(n),
        }
    }

    #[inline]
    fn read_u32(&self, n: u32) -> u32 {
        match self.as_runtime_endian() {
            RuntimeEndian::Little => u32::from_le(n),
            RuntimeEndian::Big => u32::from_be(n),
        }
    }

    #[inline]
    fn read_u64(&self, n: u64) -> u64 {
        match self.as_runtime_endian() {
            RuntimeEndian::Little => u64::from_le(n),
            RuntimeEndian::Big => u64::from_be(n),
        }
    }

    #[inline]
    fn read_i16(&self, n: i16) -> i16 {
        match self.as_runtime_endian() {
            RuntimeEndian::Little => i16::from_le(n),
            RuntimeEndian::Big => i16::from_be(n),
        }
    }

    #[inline]
    fn read_i32(&self, n: i32) -> i32 {
        match self.as_runtime_endian() {
            RuntimeEndian::Little => i32::from_le(n),
            RuntimeEndian::Big => i32::from_be(n),
        }
    }

    #[inline]
    fn read_i64(&self, n: i64) -> i64 {
        match self.as_runtime_endian() {
            RuntimeEndian::Little => i64::from_le(n),
            RuntimeEndian::Big => i64::from_be(n),
        }
    }

    #[inline]
    fn read_u16_bytes(&self, bytes: [u8; 2]) -> u16 {
        match self.as_runtime_endian() {
            RuntimeEndian::Little => u16::from_le_bytes(bytes),
            RuntimeEndian::Big => u16::from_be_bytes(bytes),
        }
    }

    #[inline]
    fn read_u32_bytes(&self, bytes: [u8; 4]) -> u32 {
        match self.as_runtime_endian() {
            RuntimeEndian::Little => u32::from_le_bytes(bytes),
            RuntimeEndian::Big => u32::from_be_bytes(bytes),
        }
    }

    #[inline]
    fn read_u64_bytes(&self, bytes: [u8; 8]) -> u64 {
        match self.as_runtime_endian() {
            RuntimeEndian::Little => u64::from_le_bytes(bytes),
            RuntimeEndian::Big => u64::from_be_bytes(bytes),
        }
    }

    #[inline]
    fn read_i16_bytes(&self, bytes: [u8; 2]) -> i16 {
        match self.as_runtime_endian() {
            RuntimeEndian::Little => i16::from_le_bytes(bytes),
            RuntimeEndian::Big => i16::from_be_bytes(bytes),
        }
    }

    #[inline]
    fn read_i32_bytes(&self, bytes: [u8; 4]) -> i32 {
        match self.as_runtime_endian() {
            RuntimeEndian::Little => i32::from_le_bytes(bytes),
            RuntimeEndian::Big => i32::from_be_bytes(bytes),
        }
    }

    #[inline]
    fn read_i64_bytes(&self, bytes: [u8; 8]) -> i64 {
        match self.as_runtime_endian() {
            RuntimeEndian::Little => i64::from_le_bytes(bytes),
            RuntimeEndian::Big => i64::from_be_bytes(bytes),
        }
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct LittleEndian;

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct BigEndian;

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

impl Endianness for LittleEndian {
    #[inline]
    fn as_runtime_endian(&self) -> RuntimeEndian {
        RuntimeEndian::Little
    }
}

impl Endianness for BigEndian {
    #[inline]
    fn as_runtime_endian(&self) -> RuntimeEndian {
        RuntimeEndian::Big
    }
}

impl Endianness for RuntimeEndian {
    #[inline]
    fn as_runtime_endian(&self) -> RuntimeEndian {
        *self
    }
}