#parser-combinator #minimalist #u8 #elegance

parcelona

minimalistic elegance parser combinator library

7 releases

new 0.3.1 Sep 18, 2024
0.3.0 Sep 18, 2024
0.2.1 Sep 17, 2024
0.1.9 Sep 16, 2024

#47 in Parser tooling

Download history 122/week @ 2024-08-29 199/week @ 2024-09-05 1179/week @ 2024-09-12

1,500 downloads per month
Used in take_sni

MIT license

23KB
514 lines

parcelona

minimalistic elegance parser combinator library

#[test]
fn t_color() {
use atoi::FromRadix16;

#[derive(Debug, PartialEq)]
pub struct Color {
  pub red: u8,
  pub green: u8,
  pub blue: u8,
}
let input = "#2F14DF".as_bytes();

let hex_color = fmap(seq_exact(is_hex_digit,2),|x| {let (r,_) = u8::from_radix_16(x); r});
let (_input,c) = right(starts_with(b"#"), hex_color.more_exact(3)).parse(input).unwrap();
let color = Color{ red:c[0], green:c[1], blue:c[2] };

assert_eq!(Color{red: 47, green: 20, blue: 223}, color);
}

how to parse utf8 &str ? use crate unicode-segmentation

doc

parser_combinator

This core of library and has parsers:

  • data_end
  • any
  • starts_with
  • starts_with_any
  • take
  • seq
  • seq_exact
  • seq_max
  • seq_min
  • seq_range

and has many parser combinators:

  • not (parser)
  • map (parser,Fn)
  • fmap (parser,Fn)
  • option (parser)
  • pair (parser,parser)
  • left (parser,parser)
  • right (parser,parser)
  • left_opt (parser,parser)
  • right_opt (parser,parser)
  • more (parser)
  • more_zero (parser)
  • more_max (parser,usize)
  • more_min (parser,usize)
  • more_exact (parser,usize)
  • more_range (parser,(usize,usize))
  • alt ((tuple of rarsers))
  • find_stop (parser,parser)
  • find (parser)
  • sep_pair (parser,parser,parser)
  • sep_pair_opt (parser,parser,parser)
  • between (parser,parser,parser)
  • between_opt (parser,parser,parser)
  • and_then (parser,parser,Fn)
  • sep_list (parser,parser,parser)

u8

This functions for u8

u8ext

This parsers for &[u8]

examples

  • See tests
  • take_sni tls sni hand shake parsing

Dependencies

~0.3–0.8MB
~18K SLoC