native_neural_network 0.1.6

Lib no_std Rust for native neural network (.rnn)
Documentation
use core::convert::TryInto;

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct HeaderV1 {
    pub version: u16,
    pub layer_count: usize,
    pub weights_len: usize,
    pub biases_len: usize,
}

pub fn parse_header_v1(bytes: &[u8]) -> Option<HeaderV1> {
    if bytes.len() < 20 {
        return None;
    }
    if &bytes[0..4] != b"RMD1" {
        return None;
    }
    let version = u16::from_le_bytes(bytes[4..6].try_into().ok()?);
    let layer_count = u32::from_le_bytes(bytes[8..12].try_into().ok()?) as usize;
    let weights_len = u32::from_le_bytes(bytes[12..16].try_into().ok()?) as usize;
    let biases_len = u32::from_le_bytes(bytes[16..20].try_into().ok()?) as usize;
    Some(HeaderV1 {
        version,
        layer_count,
        weights_len,
        biases_len,
    })
}

pub fn is_v1_header_consistent(h: &HeaderV1) -> bool {
    if h.version != 1 {
        return false;
    }
    h.layer_count > 0
}