loqom

Crates.ioloqom
lib.rsloqom
version0.1.1
created_at2025-09-30 23:11:15.071665+00
updated_at2025-10-01 16:22:03.180789+00
descriptionA `nom` fork: a zero-copy, parser combinators library
homepage
repositoryhttps://git.sr.ht/~asibahi/loqom
max_upload_size
id1861844
size581,750
Abdul Rahman Sibahi (asibahi)

documentation

README

loqom, a nom fork, eating data byte by byte

LICENSE

loqom is a parser combinator library. It is a fork of the venerable nom, version 8.0, with a much smaller and less-worried-about-backwards-compatibility API surface. Also, some PRs and Issues in nom Github repositry has been copied into this repo. (They're linked to in the commit descriptions.)

The nom crate and repo on GitHub has plenty of excellent documentation. Almost all of it applies to this crate as well.

loqom is an arabic word meaning "bites".

Example

Hexadecimal color parser:

use loqom::{
  bytes::{tag, take_while_m_n},
  combinator::map_res,
  IResult,
  Parser,
};

#[derive(Debug, PartialEq)]
pub struct Color {
  pub red: u8,
  pub green: u8,
  pub blue: u8,
}

fn from_hex(input: &str) -> Result<u8, std::num::ParseIntError> {
  u8::from_str_radix(input, 16)
}

fn is_hex_digit(c: char) -> bool {
  c.is_digit(16)
}

fn hex_primary(input: &str) -> IResult<&str, u8> {
  map_res(
    take_while_m_n(2, 2, is_hex_digit),
    from_hex
  ).parse_complete(input)
}

fn hex_color(input: &str) -> IResult<&str, Color> {
  let (input, _) = tag("#").parse_complete(input)?;
  let (input, (red, green, blue)) = (hex_primary, hex_primary, hex_primary).parse_complete(input)?;
  Ok((input, Color { red, green, blue }))
}

fn main() {
  println!("{:?}", hex_color("#2F14DF"))
}

#[test]
fn parse_color() {
  assert_eq!(
    hex_color("#2F14DF"),
    Ok((
      "",
      Color {
        red: 47,
        green: 20,
        blue: 223,
      }
    ))
  );
}
Commit count: 0

cargo fmt