| Crates.io | loqom |
| lib.rs | loqom |
| version | 0.1.1 |
| created_at | 2025-09-30 23:11:15.071665+00 |
| updated_at | 2025-10-01 16:22:03.180789+00 |
| description | A `nom` fork: a zero-copy, parser combinators library |
| homepage | |
| repository | https://git.sr.ht/~asibahi/loqom |
| max_upload_size | |
| id | 1861844 |
| size | 581,750 |
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".
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,
}
))
);
}