candding 0.1.0

Pure candle embeddings for Rust with no ONNX: dense, sparse, multi-vector and rerank models today, image models on the roadmap
Documentation
//! Linux's physical memory: `MemTotal` from `/proc/meminfo`.

/// The kernel writes the line in kibibytes.
pub(super) fn mem_total(meminfo: &str) -> Option<u64> {
  let value = meminfo
    .lines()
    .find_map(|line| line.strip_prefix("MemTotal:"))?;
  let kib: u64 = value.trim().strip_suffix("kB")?.trim().parse().ok()?;
  kib.checked_mul(1024)
}

#[cfg(test)]
mod tests {
  use super::*;

  #[test]
  fn mem_total_is_read_in_kibibytes_past_the_free_and_available_lines() {
    let meminfo = "MemFree:          480112 kB\nMemAvailable:   12035340 kB\nMemTotal:       16374836 kB\nBuffers:          201376 kB\n";
    assert_eq!(mem_total(meminfo), Some(16_374_836 * 1024));
  }

  #[test]
  fn a_missing_or_malformed_line_gives_no_figure() {
    assert_eq!(mem_total("MemAvailable:   12035340 kB\n"), None);
    assert_eq!(mem_total("MemTotal:       lots kB\n"), None);
    assert_eq!(mem_total("MemTotal:       16374836 MB\n"), None);
  }
}