Pure‑Rust port of ntHash rolling‑hash suite, focused on contiguous k‑mer hashing for DNA sequences.
cargo add nthash-rsuse nthash_rs::{NtHashBuilder, NtHashError};
fn main() -> Result<(), NtHashError> {
let seq = b"ACGTCAGTNNNNACGTACGT";
let k = 4u16;
let m = 2u8; // number of hashes per k-mer
// Build an iterator over all valid k-mers
let iter = NtHashBuilder::new(seq)
.k(k)
.num_hashes(m)
.pos(0)
.finish()?;
for (pos, hashes) in iter {
// slice out the current k-mer
let kmer = &seq[pos..pos + k as usize];
println!("{} → {:x?}", kmer, hashes);
}
Ok(())
}If you prefer to manage the rolling yourself:
use nthash_rs::NtHash;
let seq = b"ACGTCAGTNNNNACGTACGT";
let k = 4u16;
let m = 2u8;
let mut h = NtHash::new(seq, k, m, 0)?;
if h.roll() {
println!("first hash: {:#x}", h.hashes()[0]);
}
while h.roll() {
println!("next hash: {:#x}", h.forward_hash());
}This project is MIT‑licensed (see LICENSE).